ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt信号与槽简介

2020-06-14 12:57:12  阅读:377  来源: 互联网

标签:函数 简介 QPushButton b1 信号 按钮 MyWidget Qt


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

1  新建工程

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

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

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

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

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):

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

 实现的相关代码

 先在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

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

 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

运行,进行测试:

 

标签:函数,简介,QPushButton,b1,信号,按钮,MyWidget,Qt
来源: https://www.cnblogs.com/mrlayfolk/p/13124400.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有