QT常用函数概述
setWindowTitle("string"): 设置标题
setText("string"):给按钮设置内容
setParent(&父对象):设置父对象
构造函数传参:设置父对象(只需要父对象显示,其子对象自动显示)
move(x, y):以左上角为坐标原点,移动x, y
show:显示对象所属控件
exec:进程一直显示,等待用户操作
-
connect(&b1, &QPushButton::pressed, this, &MainWidget::close)
&b1: 信号发出者,指针类型
&QPushButton::pressed:处理的信号,&发送者的类名::信号的名字
this:信号接收者
&MainWidget::close: 槽函数,信号处理函数 &接收的类名::槽函数名字(接收对象在接收到信号之后所需要调用的函数)
disconnect:断开信号和槽的连接
hide:对象所属控件隐藏
resize(x, y):重新界定子窗口大小
move(x, y):相对于父窗口,子窗口移动(x, y)
setGeometry(x1, y1, x2, y2):(x1, y1)为框的位置,(x2, y2)为框的大小
menuBar:添加菜单栏
addMenu:添加菜单
addAction:添加菜单项,添加动作
addSeparator:添加分割线
addToolBar("toolBar"):添加菜单栏快捷方式
statusBar():新建状态栏
QLabel:新建标签
addWidget:从左往右添加状态栏
addPermanentWidget:从右往左添加状态栏
QTextEdit:新建文本编辑框
setCentralWidget:为文本编辑框添加文本编辑功能
-
setWidget:给对应窗口设置文本编辑
例如:
this->setWidget(textEdit);
给当前窗口设置文本编辑 QMessageBox::about:创建关于对话框
QMessageBox::question:创建问题对话框
setCurrentIndex:切换页
setTextMargins:设置外边距(设置内容显示间隙)
setEchoMode:设置内容显示方式
按钮,框函数
triggered
pressed
clicked
功能好像一样QAQ
QT头文件
QPushButton:按钮
QMenuBar:菜单(用于添加菜单栏)
QMenu:菜单(添加菜单)
QAction:添加菜单项(添加动作)
QDebug:打印
QToolBar:添加菜单项的快捷方式
QStatusBar:状态栏
QLabel:标签
QTextEdit:文本编辑框(也称核心控件)
QDockWidget:浮动窗口
QDialog:模态对话框
QMessageBox:对话框
-
QFileDialog:文件对话框
示例:
QAction *p5 = menu->addAction(QString::fromLocal8Bit("文件对话框")); connect(p5, &QAction::triggered, [=]() { QString path = QFileDialog::getOpenFileName( this, "open", "../",//打开文件对话框的位置(命令行) "source(*.cpp *.h);;Text(*.txt);;All(*.*)"//文件类型 ); qDebug()<<path; } );
QStringList:字符串列表
QCompleter:字符表达形式???
QMovie:gif动画
信号与槽
概述
信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。(这里提一句,Qt 的信号槽使用了额外的处理来实现,并不是 GoF 经典的观察者模式的实现方式。)
信号和槽是Qt特有的信息传输机制,是Qt设计程序的重要基础,它可以让互不干扰的对象建立一种联系。
槽的本质是类的成员函数,其参数可以是任意类型的。和普通C++成员函数几乎没有区别,它可以是虚函数;也可以被重载;可以是公有的、保护的、私有的、也可以被其他C++成员函数调用。唯一区别的是:槽可以与信号连接在一起,每当和槽连接的信号被发射的时候,就会调用这个槽。
自定义槽
QT5:任意的成员函数,普通全局函数,静态函数
槽函数需要与信号一致(参数类型和参数个数一致)
由于信号都是没有返回值,所以,槽函数一定没有返回值
额外知识点
emit:意为发送,主要用于发送信号
-
signals:
信号必须有signals关键字来声明
信号没有返回值,但可以有参数
信号就是函数的声明,只需声明,无需定义
使用:emit mySignal();
在发送带参数的命令时,字符串包含中文的话,如果报错,请参照QT中提示“常量中h有换行符”解决办法 一文
重载信号用函数指针
例如
void (SubWidget::*funSignal)()=&SubWidget::mySignal;
void (SubWidget::*testSignal)(int, QString)=&SubWidget::mySignal;
connect(&subWin, funSignal, this, &MainWidget::dealSub);
connect(&subWin, testSignal, this, &MainWidget::dealSolt);
- 打印由Unicode编码转中文
//str.toUtf8() -> 字节数组QByteArray
//...data() -> QByteArray -> char *
qDebug()<<a<<str.toUtf8().data();
//高版本可以直接用第二种方式
//高版本QT可以直接打印中文
qDebug()<<a<<str;
-
Lambda表达式:
匿名函数对象
C++11增加的新特性,项目文件:CONFIG += C++11
QT配合信号一起使用
例如
int a=10, b=100; connect(b4, &QPushButton::released, // = :把外部局部变量、类中所有成员以值传递方式 // this: 类中所有成员以值传递方式 // & :把外部所有局部变量(除类中定义的) [=]() mutable //将值传递的变量设为可改变 { b4->setText("123"); qDebug()<<"1111"; qDebug()<<a<<b; a=11; } );
内存回收机制
1)指定父对象后 2)直接或间接继承于QObject
子对象如果是动态分配空间的new,不需要手动释放delete
系统会自动释放