一、概念
跨平台的图形应用界面应用程序框架。
二、常用快捷键
快捷键 | 解释 |
F4 | 在对应的.cpp和.h之间快速切换 |
ctrl + b | 编译程序 |
ctrl + r | 运行程序 |
ctrl + shift + ↑ / ↓ | 向上 / 下移动选中的代码 |
ctrl + i | 自动对齐选中的代码 |
三、对象树
总结:父控件被析构,包含其中的子控件也会被自动析构。
顺序: 构造(先父后子) 析构(先子后父)
- QObject是以对象树的形式组织起来的。
- 当你创建一个QObject对象时,QObject构造函数接收一个QObject指针作为参数,这个参数就是parent,也就是父对象指针。
- 相当于,在创建QObject对象时,会提供一个QObject的父对象。刚刚创建的对象会自动添加到父对象的children()列表中。
- 当父对象析构时,children列表中的对象也会析构。(父对象不是继承意义的父类!)
四、常用组件
4.1 QWidget
创建空窗口。
函数名称 | 解释 |
setWindowTitle(String text) | 设置窗口标题内容 |
resize(int width, int height) | 重新设置窗口大小 |
setFixedSize(int width, int heigth) | 设置固定窗口大小 |
show() | 显示窗口 |
4.2 QMainWindow
4.3 QPushButton
QPushButton属于QWidgets模块,需要包含头文件#include<QPushButton>。
函数名称 | 解释 |
QPushButton(String text, QWidget* qw) | 构造方法,设置文本和父窗口 |
setText(String text) | 设置按钮文本内容 |
resize(int width, int height) | 设置按钮大小 |
move(int x, int y) | 设置按钮坐标 |
setParent(QWidget* qw) | 设置父窗口 |
show() | 独立窗口显示按钮(一般不这样使用) |
五、信号和槽
信号:触发事件的类型
槽:收到指定信号后的处理函数
5.1 连接方式
连接信号和槽采用connect函数。声明如下:
函数声明 | 解释 |
static connect(const QObject* sender, const char* signal, const QObject* receiver, const char* slot, Qt::ConnectionType type = Qt::AutoConnection); | 第一个参数sender:发送信号的部件指针 第二个参数signal:信号的类型 第三个参数receiver:信号的接收者 第四个参数slot:槽,也就是处理函数的名称(指针) |
示例如下:(对一个退出按钮设置退出窗口槽)
QWidget *w = new QWidget;//窗口
QPushButton *btn = new QPushButton("退出按钮", w);//按钮
connect(btn, &QPushButton::clicked, w, &QWidget::close);
5.2 自定义信号
在类中声明signals:,并将信号写入其中。
(信号只写声明,不写实现)
(信号返回值void)
(信号可以重载)
5.2.1 触发信号
触发信号采用emit关键字,举例如下:
//触发btn组件的sign01信号
emit btn->sign01();
5.3 自定义槽
在类中声明public slots:,并将槽写入其中。
(槽必须 声明 + 实现)
(槽返回值void)
(槽可以重载)
5.4 信号与槽的参数传递
在connect时,会检查信号与槽的参数类型和数目是否匹配。
- 如果类型不匹配,Qt会发出警告,并不予连接。
(在Qt4中,参数个数:信号可以大于槽,但类型必须匹配)
- 如果类型匹配,Qt会自动将信号的参数按序发送给槽
下边是一个自定义带参信号与槽的简单例子,便于理解:
class MyWidget : public QWidget {
//信号
signals:
void mySign(Qstring s);
//槽
public slots:
void mySlot(Qstring s) {
qDebug() << s;
}
public :
//connect函数
void initConnect() {
//通过函数指针设置 信号 与 槽 的地址
//因为如果直接传递函数地址,connect无法识别函数重载方式
void (MyWidget:: *sign01)(QString) = &MyWidget::mySign;
void (MyWidget:: *slot01)(QString) = &MyWidget::mySign;
//连接
connect(this, sign01, this, slot01);
}
//触发信号函数
void myEmit() {
emit mySign("Hello, CC.");
}
}
5.5 多连多
可以多次调用connect函数,将一个信号连接多个信号,这样可以实现一个出发多个基础槽函数的组合。同理,也可以一个信号连接多个槽函数,多个信号连接同一个槽函数。
比如:“LEFT信号”对应“左槽”,“UP信号”对应“上槽”。
当我们需要设计一个“左上信号”,只需要调用两次connect函数即可:
connect(this, up_left, this, UP);
connect(this, up_left, this, LEFT);
5.6 断开连接
断开信号与槽、信号与信号的连接,可以采用disconnect函数实现,声明如下:
函数声明 | 解释 |
static disconnect(const QObject* sender, const char* signal, const QObject* receiver, const char* slot, Qt::ConnectionType type = Qt::AutoConnection); | 第一个参数sender:发送信号的部件指针 第二个参数signal:信号的类型 第三个参数receiver:信号的接收者 第四个参数slot:槽,也就是处理函数的名称(指针) |