【Qt】2.2 继续了解信号和槽
槽和普通成员函数一样,可以是虚函数、被重载,可以是公有、私有、保护的。它可以被其它C++成员函数调用。
槽连接了信号,当发射这个信号时,槽会被自动调用。
连接函数:
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionTypetype = Qt::AutoConnection )
sender和receiver是指向QObject的指针。
signal和method是不带参数名的函数,需要使用宏SIGNAL()和SLOT()。
一个信号可以连接多个槽,例如:
connect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
connect(okButton, SIGNAL(clicked(bool)),
checkBox2, SLOT(click()));
当点击okButton时,checkBox1和checkBox2都会执行各自的槽click()。
多个信号可以连接同一个槽,例如:
connect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
connect(cancelButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
点击okButton或cancelButton时,checkBox1都会执行槽click()。
一个信号可以与另个一个信号连接,例如:
connect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
connect(cancelButton, SIGNAL(clicked(bool)),
okButton, SIGNAL(clicked(bool)));
当点击cancelButton时,会由okButton的信号clicked(bool)做响应,okButton会发射信号clicked(bool),从而checkBox1的槽click()会自动执行。
另外,cancelButton的信号clicked(bool)中的bool参数会传递给okButton的信号clicked(bool)中的bool参数。
在这里okButton的clicked(bool)信号被当作槽来使用,槽中有多少个参数,就会要求发射信号的函数至少要带有多少个参数,否则连接是不成功的。
连接可以被移除,例如:
connect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
disconnect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
当删除对象时,Qt会自动删除与这个对象相关的所有连接。
信号的参数数量至少是槽的参数数量。
1.例如:
connect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(click()));
当发射信号时,信号的bool参数是没有用的。
2.例如:
connect(okButton, SIGNAL(clicked(bool)),
checkBox1, SLOT(setHidden(bool));
当发射信号时,信号的bool参数会传递给槽的bool参数。
3.例如:
connect(checkBox1, SIGNAL(released()),
cancelButton, SLOT(setVisible(bool)));
这是错误的,槽要求一个bool参数,信号也必须有这一个bool参数。
4.例如:
connect(this, SIGNAL(send(bool, int, double)),
this, SLOT(recive(bool, int)));
信号的参数个数可以大于等于槽的参数个数,同时信号和槽的各个参数位置需要对应。
在这里,信号的第三个参数double类型不会被传递到槽。
在成员函数中手动发射信号,使用emit,例如:
在对象创建时,构造函数就已经连接了setVal信号和recive槽。
当对象调用SetValue()函数时,全发射setVal信号,同时传入相应的参数值,发射信号之后会由recive槽接收,设置val变量的值。
好咯,这一节的总结就到这里~
【Qt】2.2 继续了解信号和槽的更多相关文章
- Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写
当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了. 提高代码效率,减少代码量. 代码片: void Widget::onClicked() { QPushButton* but ...
- Qt源码分析之信号和槽机制
Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...
- Qt入门(3)——信号和槽
信号和槽用于对象间的通讯.信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分.在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件.更一般地,我们希望 ...
- Qt Quick快速入门之信号、槽
信号和槽主要用于组件之间的通信,类似于.net和java中的委托. 使用QObject::connect方法将信号与槽关联起来,然后信号的发起者发出信号,接受者中的槽函数就会执行. 比如connect ...
- Qt源码分析之信号和槽机制(QMetaObject是一个内部struct)
Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...
- 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...
- QT学习日记篇-02-QT信号和槽
课程大纲: <1>给控件改名字 随着UI界面的控件变多,如果使用系统自带的名称,后期会让人不明觉厉,说白了,就是掌握C++的命名规则:易懂,条例清晰,人性化 方法:直接点击控件,进入右侧对 ...
- Qt error ------ qRegisterMetaType() 跨线程信号与槽的形参携带
Qt提示: QObject::connect: Cannot queue arguments of type 'FrequencySpectrum' (Make sure 'FrequencySpec ...
- Qt ------ QWidget 自定义子类使用信号与槽(Q_OBJECT)后 stylesheet 失效
这个应该属于 Qt 的一个bug,Qt assistant 给出相应的解决办法:重写函数“void paintEvent(QPaintEvent *event);”,添加下面截图中的一段代码
- QT 的信号与槽
转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 ...
随机推荐
- vc编程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?
解决办法菜单--〉项目--〉设置,出现“项目设置”对话框,左边展开项目,在“源文件”中找到出错的文件,然后在右边选择“C/C++”属性 页,在Category下拉框中选择“Precompiled He ...
- BCG使用
VC界面库分两大类:一,Direct UI,优点:界面绚丽.二,MFC扩展库.优点:1,方便用户.2,减少开发成本.3,界面相对好看.BCG属于后者,非常是否适合优化办公软件界面. 作者在2008年以 ...
- ZOJ3166【找环值最小】
题意: 给你一幅图,要你找一个hotel能够满足出去回来,而且保证权值最小: 思路: 可以搜环,然后取最小权值环,拿个点: floyd方便,初始话自己到自己就是无穷,然后就枚举一下给出的hotel就好 ...
- hdu1158【DP】
题意: 第一行项目数: 第二行每个工人的Hire Salary Fire money 第三行每个项目需要的人的数量: 工人在hire/fire的时候要付出额外的钱,如果已经hire了还没有fire就一 ...
- php 发送邮件(实例)
html部分 <!DOCTYPE html> <html> <head> <title></title> <script type=& ...
- DataGridView Index -1 does not have a value 错误
遇到一个非常奇怪的问题, 一个DataGridView在装载数据后, 无论点击Column还是Cell都会报如下错误: 查bing之后发现StackOverFlow都指向DataSource的问题. ...
- 浅谈volatile关键字
volatile是一种轻量级的同步机制.它可以保证内存可见性以及防止指令重排序,但是不保证原子性 volatile和JMM机制是不可分割的,在谈volatile的时候有必要先了解以下JMM JMM(J ...
- MySQL--表操作1
这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师. 依赖软件:mysql 系统环境:win 注:本次所有命令都是在命令行上执行 数据库的四大天王操作:增删改查 增删改查都是在对表进行操 ...
- C#主从表查询
软件的使用必然涉及到主表和子表的操作,我们先在SQLite中创建子表.比如 创建一学生信息表做主表,再创建一个学生成绩表做子表.然后我们在程序中成绩 方法来连接子表. 判断bindingsource中 ...
- Centos 7.x 安装 MongoDB
官方安装资料:点击直达 本次以Centos为安装主机 1:首先先导入MongoDB的yum源,因为Centos默认是没有MongoDB的yum源,创建文件:/etc/yum.repos.d/mongo ...