Qt的信号和槽机制
2024-09-05 13:40:01
一、信号和槽机制
信号和槽用于两个对象之间的通信,我们希望任何对象都可以和其他对象进行通信。
当一个特殊的事情发生时便可以发射一个信号,而槽就是一个函数,它在信号发射后被调用来相应这个信号。(强耦合)
一个信号对应一个槽;一个信号也可以关联多个槽;多个信号关联一个槽;一个信号关联另一个信号。
二、mySignalSlot实例
新建QtGui应用>>项目名mySignalSlot>>基类QWidget>>新建Qt设计师界面>>Dialog without Buttons>>类名MyDialog
mydialog.h添加一个信号:
- signals:
- void dlgReturn(int); //自定义的信号
signals没有public、private、protected等限定符。并且只有申明没有实现。只有QObject类和其子类派生的类才能使用信号和槽机制。
信号和槽在类申明最开始处添加Q_OBJECT宏(自动完成)
mydialog.ui>>添加Spin Box部件和Push Button部件>>PushButton显示为确定>>pushButton增加槽如下:
- void MyDialog::on_pushButton_clicked() //确定按钮
- {
- int value = ui->spinBox->value(); //获取输入的数值
- emit dlgReturn(value); //发射信号
- close(); //关闭对话框
- }
widget.h添加自定义槽
- private slots:
- void showValue(int value);
widget.ui>>拖入Label部件>>更改为"获取的值是:"
widget.cpp>>添加头文件#include "mydialog.h">>在构造函数中添加:
- MyDialog *dlg = new MyDialog(this);
- connect(dlg, SIGNAL(dlgReturn(int)), this, SLOT(showValue(int)));
- dlg->show();
这里创建了一个MyDialog,使用Widget作为父部件。然后将MyDialog类的dlgReturn()信号与Widget类的showValue()槽进行关联。
connect()原型:
- static QMetaObject::Connection connect(const QObject *sender, const char *signal,
- const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);
第一个:发送信号的对象
第二个:要发送的信号
第三个:接收信号的对象
第四个:执行的槽
对于信号和槽,必须使用SIGNAL()和SLOT()宏将参数转化成const char *类型。
widget.cpp:
- void Widget::showValue(int value)
- {
- ui->label->setText(tr("获取的值是:%1").arg(value));
- }
最新文章
- WinForm------GridControl单元格内容修改外表样式
- DUT Star Round2
- Codeforces Round #347 (Div. 2)
- 【Linux】——sleep无法正常休眠
- 在SpringMVC中获取request对象的几种方式
- paper 59:招聘
- selendroid项目实战教程1
- php 之 文件操作(0524)
- CDialog类中OnCancel()、OnInitDialog()作用
- android延迟执行
- javaWeb之邮箱发送(邮箱客户端配置)
- bzoj3126[Usaco2013 Open]Photo 单调队列优化dp
- AndroidStudio中导入SlidingMenu报错解决方案
- Linux 环境下安装RabbitMQ的步骤
- js实现复制内容自动添加版权信息
- 第五十五天 css基础入门
- Rainbond v5.1.2发布,微服务架构应用便捷管理和交付
- linux串口编程参数配置详解(转)
- 139. Word Break (String; DP)
- Docker学习--Linux基础准备篇