【Qt】2.2 继续了解信号和槽
2018-06-17 23:59:22来源:未知 阅读 ()
槽和普通成员函数一样,可以是虚函数、被重载,可以是公有、私有、保护的。它可以被其它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变量的值。
好咯,这一节的总结就到这里~
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- OpenCV开发笔记(五十九):红胖子8分钟带你深入了解分水岭 2020-05-24
- 了解CAdoSqlserver 2019-09-04
- Qt最新版5.12.2在Win10环境静态编译安装和部署的完整过程(VS 2019-08-29
- 论分治与归并思想 2019-08-16
- hdu--1232 继续通畅工程 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash