参考视频:黑马程序员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):

 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

相关文章: