三种基类:
- QMainWindow:基类, 最基本的什么都没有
- QWidget:它的父类是QMainWindow, 包含一些状态栏以及菜单栏相关的信息
- QDialog:它的父类是QMainWindow, 包含一些对话框
程序中:
return a.exec();//让应用程序对象进入消息循环,程序阻塞到这一行,知道点击错号x程序运行结束
.pro文件
QT += core gui //qt包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widget //版本大于4时,包含widget这个模块
TARGET = 01_FirstProject // 目标:生成exe的名称
TEMPLATE = app //模板:创建应用程序模板
SOURCES += ……//源文件
HEADERS += ……//头文件
.h文件
Q_OBJECT//Q_OBJECT宏:允许类使用信号和槽的机制
帮助文档
在文件夹Qt5.11.3/5.11.3/bin/assistant
按钮操作
- 创建QPushButton * btn = new QPushButton;
- 设置按钮的名称 btn->setText(“titile”);
- 设置按钮在哪个窗口下 btn->setParent(this);
- 设置按钮的位置 btn->move(100,100);
- 设置按钮的大小 btn->resize(50,50);
窗口操作
- 设置窗口的名称 setWindowTitle(“title”)
- 设置窗口的大小 resize(300, 400)
- 设置窗口为固定大小,此时不能缩放了 setFixedSize(400, 400)
信号和槽
槽:信号的处理函数
信号槽的优点:松散耦合。信号的发送方和信号的接收方,本身没有什么关系,通过一个connect函数连接起来
connect(参数1,参数2,参数3,参数4)
- 参数1:信号的发送方(按钮btn)
- 参数2:发送的信号(地址,点击:clicked)
- 参数3:信号的接收方(窗口:this)
- 参数4:处理的槽函数(关闭:close)
connect(btn, &QPushButton::clicked, this, &QWidget::close);
自定义信号和槽
自定义信号:
- 需要声明,不需要实现
- 返回值类型void,可以有不同个数的参数,可以重载
- 信号函数写在signals关键字下
自定义槽函数:
- 需要声明,也需要实现
- 返回值类型为void,可以有不同个数的参数,可以重载
- 槽函数写在public slots或者public关键字下
触发自定义信号:关键字emit
案例02
下课后,老师发信号饿了,学生响应请客吃饭
当自定义信号和槽函数出现重载
- 需要利用函数指针指向明确的函数
- void (Teacher::*signaltea) (QStirng) = &Teacher::hungry
- QString类型转化成char * 类型:需要先利用 .toUtf8() 转化成 QByteArray,再利用 .data()转化成char *
- 信号可以连接信号
- 断开信号disconnect
拓展
- 信号可以连接信号
- 一个信号可以连接多个槽函数
- 多个信号可以连接一个槽函数
- 信号函数的参数个数要和槽函数的个数一 一对应,信号函数的参数个数可以多余槽函数的个数,反之不行
- 信号槽可以断开连接
QT4版本的写法
connect(信号发送者, SIGNAL(信号函数),信号接受者,SLOT(槽函数) )
优点:参数直观
缺点:编译时,不会进行错误检测
lambda表达式
- [ ]标识符,匿名函数
- ()参数
- { } 函数体
- [=]值传递;[&]引用传递
- mutable:修饰值传递的变量,改变的是变量的副本,改变不了参数本身
- 返回值:()[]->int{return 100;};
来源:CSDN
作者:qq_31672701
链接:https://blog.csdn.net/qq_31672701/article/details/104296125