Qt信号与槽简介

参考视频:黑马程序员https://www.bilibili.com/video/BV1XW411x7NU?p=4

1  新建工程

先创建一个控件基础工程,创建后的界面如下:

Qt信号与槽简介

主函数我们不需要修改,就保持这样,对于C++的知识我不太理解。

上述代码中,执行到第7行的时候,会先去执行基类的构造函数,再执行MyWidget类的构造函数。我们只需要在构造函数中实现需要实现的功能。

构造函数对应在mywidget.cpp中:

Qt信号与槽简介

2  测试代码

测试目的

在主窗口中,新建两个按钮,功能如下:

按钮一的功能:按下按钮,关闭主窗口;

按钮二的功能:释放按钮,更改按钮二的文本,并隐藏按钮一。

由于在实现过程中,会用到信号与槽的知识,就先简单介绍一下基本知识,可能不正确,这只是我个人的理解:

信号:某一事件发生时产生,用于表示一个事件发生了。

槽:就是信号处理函数,用于指示当信号发生时,需要做出什么动作。

其中,我们connect函数来连接信号与槽之间的关系,函数的原型如下:

connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection);

举例说明:

connect(&b1, &QPushButton::pressed, this, &MyWidget::close);

/* &b1:信号发出者,指针类型

* &QPushButton::pressed:处理的信号,&发送者的类名::信号名字

* this:信号接收者

* &MyWidget::close:槽函数,信号处理函数 &接收的类名::槽函数名字

*/

不同的控件有哪些信号,可通过帮助文档查看,以QPushButton为例进行说明(点QPushButton,再按F1):

Qt信号与槽简介这里没有看到signal函数,可能是从它的父类继承过来的,我们再看一下它的父类:

Qt信号与槽简介Qt信号与槽简介Qt信号与槽简介

 实现的相关代码

 先在MyWidget类中实现两个按钮(mywidget.h):

Qt信号与槽简介
 1 #ifndef MYWIDGET_H
 2 #define MYWIDGET_H
 3 
 4 #include <QWidget>
 5 #include <QPushButton>
 6 
 7 class MyWidget : public QWidget
 8 {
 9     Q_OBJECT
10 
11 public:
12     MyWidget(QWidget *parent = 0);
13     ~MyWidget();
14 
15 private:
16     QPushButton b1;
17     QPushButton *b2;
18 
19     void myslot();
20 
21 };
22 
23 #endif // MYWIDGET_H
View Code

再在构造函数中实现两个按钮的功能(mywidget.cpp):

Qt信号与槽简介
 1 #include "mywidget.h"
 2 #include <QPushButton>
 3 
 4 MyWidget::MyWidget(QWidget *parent)
 5     : QWidget(parent)
 6 {
 7     b1.setParent(this);
 8     b1.setText("按钮一");
 9     b1.move(100, 100);
10 
11     b2 = new QPushButton(this);
12     b2->setText("按钮二");
13 
14     connect(&b1, &QPushButton::pressed, this, &MyWidget::close);
15     /* &b1:信号发出者,指针类型
16     *  &QPushButton::pressed:处理的信号,&发送者的类名::信号名字
17     *  this:信号接收者
18     *  &MyWidget::close:槽函数,信号处理函数 &接收的类名::槽函数名字
19     */
20 
21     /*
22      * 自定义槽,普通函数的用法
23      * Qt5:任意的成员函数,普通全局函数,静态函数
24      * 槽函数需要和信号一致(参数、返回值)
25      * 由于信号都是没有返回值,所以槽函数一定没有返回值
26      */
27      connect(b2, &QPushButton::released, this, &MyWidget::myslot);
28 
29      connect(b2, &QPushButton::released, &b1, &MyWidget::hide);
30     /*
31      * 信号:短信
32      * 槽函数:接收短信的手机
33     */
34 }
35 
36 void MyWidget::myslot()
37 {
38     b2->setText("123");
39 }
40 
41 MyWidget::~MyWidget()
42 {
43 
44 }
View Code

运行,进行测试:

Qt信号与槽简介

 

上一篇:python-访问PyQT5中动态创建的按钮


下一篇:pyqt5美化界面