Qt多个信号连接到一个槽,在槽中识别信号的发送者方法
2014-05-10 08:57
761 查看
Qt是通过信号和槽的机制进行事件传递的,当有多个不同类型、或相同类型的物件的发送信号都通过一个槽来处理的时候,需要在槽中识别出这些信号然后做相应的处理。
例如:
在一个界面中有16个按钮(QPushButton)和4个(QRadioButton)这20个物件的SIGNAL(clicked(bool))都连接(connect)到同一个按键的处理槽中(void get_keyvalue(bool))
那么就需要在get_keyvalue这个槽中把这些信号的发送者都识别出来,然后取其相应的键值然后发送,其方法是:
void FBx::get_keyvalue(bool)
{
if (QPushButton* btn = dynamic_cast<QPushButton*>(sender())){
send_key(btn->whatsThis());
}
else if (QRadioButton *rtn = dynamic_cast<QRadioButton*>(sender())){
send_key(rtn->whatsThis());
}
}
上面的dynamic_cast也可以是qobject_cast
在槽(SLOT)中sender()函数会返回一个指向QObject 的指针来指向信号的发送者(Returns a pointer to the object that sent the signal, if called in a slot activated by a signal;)。然后通过C++ RTTI(Run-Time Type Identification)机制提供的dynamic_cast运算符,在执行的时候检查sender()返回的对象是否是QPushButton类,如果是则将sender()返回的QObject指针转换为QPushButton指针,然后if中的语句就会执行。如果sender()返回的对象不是QPushButton类型的指针,则dynamic_cast就会返回0,if中的语句就不会执行了。
还可以参考
例如:
在一个界面中有16个按钮(QPushButton)和4个(QRadioButton)这20个物件的SIGNAL(clicked(bool))都连接(connect)到同一个按键的处理槽中(void get_keyvalue(bool))
那么就需要在get_keyvalue这个槽中把这些信号的发送者都识别出来,然后取其相应的键值然后发送,其方法是:
void FBx::get_keyvalue(bool)
{
if (QPushButton* btn = dynamic_cast<QPushButton*>(sender())){
send_key(btn->whatsThis());
}
else if (QRadioButton *rtn = dynamic_cast<QRadioButton*>(sender())){
send_key(rtn->whatsThis());
}
}
上面的dynamic_cast也可以是qobject_cast
在槽(SLOT)中sender()函数会返回一个指向QObject 的指针来指向信号的发送者(Returns a pointer to the object that sent the signal, if called in a slot activated by a signal;)。然后通过C++ RTTI(Run-Time Type Identification)机制提供的dynamic_cast运算符,在执行的时候检查sender()返回的对象是否是QPushButton类,如果是则将sender()返回的QObject指针转换为QPushButton指针,然后if中的语句就会执行。如果sender()返回的对象不是QPushButton类型的指针,则dynamic_cast就会返回0,if中的语句就不会执行了。
还可以参考
相关文章推荐
- Qt多个信号连接到一个槽,在槽中识别信号的发送者方法(实验 可行)
- Qt多个信号连接到一个槽,在槽中识别信号的发送者方法
- Qt多个信号连接到一个槽,在槽中识别信号的发送者方法
- Qt多个信号连接到一个槽,在槽中识别信号的发送者方法
- QT多个信号连接到一个槽
- QT之中多个信号连接同一个槽【细说版】
- Qt编程技巧 多个信号连接一个槽
- Qt的内建(built-in)对话框,多个信号连接一个槽
- 【Qt】QT之中多个信号连接同一个槽【细说版】
- Qt中除了用connect可以连接信号和槽之外还有什么方法可以连接
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
- QT3连接SQLite及使用方法
- 火狐SSL收到一个弱临时Diffie-Hellman连接失败解决方法
- Qt信号和槽连接方式的选择
- MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL )
- 解决Adb connection Error:远程主机强迫关闭了一个现有的连接。 Connection attempts: 1 真机没有连接得最后方法
- 解决中64位Win7系统上PLSQL无法连接ORACLE的方法(PLSQL无法识别ORACLE_HOME的配置)
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中
- Qt中一个.cpp类的函数调用另一个.cpp中类的函数的方法