博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT-自定义信号和槽
阅读量:4313 次
发布时间:2019-06-06

本文共 1993 字,大约阅读时间需要 6 分钟。

前言:信号和槽是一种松耦合机制,或者说是一种分布式机制,信号广播出去,槽会自定义订阅接收。

一、新建工程

二、新建部件

拖入button按钮。修改内容为“发送自定义信号”

三、自定义发送信号

3.1 修改widget.h文件

 添加处理按钮 clicked 信号的槽函数和新的自定义的信号 SendMsg。

#ifndef WIDGET_H#define WIDGET_H#include 
namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();signals: //添加自定义的信号,信号强制为公有类型,所以没有前缀 void SendMsg(QString str); //信号只需要声明,不要给信号写实体代码public slots: //接收按钮信号的槽函数 void ButtonClicked();private: Ui::Widget *ui;};#endif // WIDGET_H

3.2 修改widget.cpp文件

#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);    //关联    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(ButtonClicked()));}Widget::~Widget(){    delete ui;}//槽函数void Widget::ButtonClicked(){    //用 emit 发信号    emit SendMsg( tr("This is the message!") );}

四、自定义接收槽

4.1 新建C++类

新建名字为“ShowMsg”的C++类,基类为QObject类。

4.2 修改 showmsg.h文件

声明接收 SendMsg 信号的槽函数 RecvMsg

#ifndef SHOWMSG_H#define SHOWMSG_H#include 
class ShowMsg : public QObject{ Q_OBJECTpublic: explicit ShowMsg(QObject *parent = 0); ~ShowMsg();signals:public slots: //接收 SendMsg 信号的槽函数 void RecvMsg(QString str);};#endif // SHOWMSG_H

4.3 修改showmsg.cpp文件

#include "showmsg.h"#include 
ShowMsg::ShowMsg(QObject *parent) : QObject(parent){}ShowMsg::~ShowMsg(){}//str 就是从信号里发过来的字符串void ShowMsg::RecvMsg(QString str){ QMessageBox::information(NULL, tr("Show"), str);}

4.4 修改main.cpp文件

#include "widget.h"#include 
#include "showmsg.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; //①主窗体对象,内部会发送 SendMsg 信号 ShowMsg s; //②接收端对象,有槽函数 RecvMsg //③关联,信号里的字符串参数会自动传递给槽函数 QObject::connect(&w, SIGNAL(SendMsg(QString)), &s, SLOT(RecvMsg(QString))); //显示主界面 w.show(); return a.exec();}

五、运行

 

-END-

参考自:https://qtguide.ustclug.org/

转载于:https://www.cnblogs.com/chendeqiang/p/10281233.html

你可能感兴趣的文章
Java 必知必会的 20 种常用类库和 API
查看>>
HDU 1087 Super Jumping! Jumping! Jumping!
查看>>
0007_初始模块和字节码
查看>>
[效率提升]如何管理好你的电脑文件
查看>>
C++实验二
查看>>
SharePoint2010 富文本框添加图片功能的扩展
查看>>
零零碎碎的知识
查看>>
UNIX基础--用户和基本账户管理
查看>>
设计模式
查看>>
5.0以上机器XPOSED框架安装流程
查看>>
静态方法与非静态方法
查看>>
注释,字符串
查看>>
性能瓶颈
查看>>
cmd 导入数据库
查看>>
Makefile书写注意事项--个人择记(一)
查看>>
文件转码重写到其他文件
查看>>
场景3 Data Management
查看>>
树结构练习——排序二叉树的中序遍历
查看>>
AC自动机模板
查看>>
python 基本语法
查看>>