关于Qt信号/槽的参数类型
2016-01-16 12:21
435 查看
1 可以使用引用类型参数吗
曾一度认为信号/槽参数如果使用指针/引用,则当信号传输到槽的时候,所传输的指针/引用指向内存已经释放,因此槽接收到的是野指针/无效引用。因此,信号/槽的参数只能使用值传递。
现在才发现上面的认识是错误的。在单线程的情况之下,就算信号/槽使用了引用类型的参数也是允许的。由于是单线程,槽接收到引用时发送信号的函数其实还没结束,因此就算传递过来的是一个局部变量的引用,也是有效的。当槽返回的时候,发送信号的函数再继续往下执行,这其实就相当于单片机中断处理。
2 connect时应该注意什么
当信号/槽的参数是引用类型时,在连接时无需指明。connect()会忽略const和&,如下面的例子所示:
曾一度认为信号/槽参数如果使用指针/引用,则当信号传输到槽的时候,所传输的指针/引用指向内存已经释放,因此槽接收到的是野指针/无效引用。因此,信号/槽的参数只能使用值传递。
现在才发现上面的认识是错误的。在单线程的情况之下,就算信号/槽使用了引用类型的参数也是允许的。由于是单线程,槽接收到引用时发送信号的函数其实还没结束,因此就算传递过来的是一个局部变量的引用,也是有效的。当槽返回的时候,发送信号的函数再继续往下执行,这其实就相当于单片机中断处理。
2 connect时应该注意什么
当信号/槽的参数是引用类型时,在连接时无需指明。connect()会忽略const和&,如下面的例子所示:
#include <QObject> class A : public QObject { Q_OBJECT public: void A(); public slots: void testSlot(const int &); signals: void testSignal(const int &); }; class A::A() { connect(this, SIGNAL(testSignal(int)), this, SLOT(testSlot(int))); // 指明参数类型int即可,忽略const和& }
相关文章推荐
- pyqt5-为QListWidget添加右键菜单
- 浅谈Qt代理
- qt 状态机弹跳效果
- 【大话QT之七】QT序列化操作
- 【Qt5】【Markdown】用到哪些文档就翻译过来
- Qt Creator添加/查找槽错误
- MQTT协议详解
- 对象封装属性的真正源头
- SPOJ QTREE 树链剖分
- QT全平台设置图标,全平台静态编译 good
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
- [Magento SQL] 获取订单 总金额,总Qty,并排除 指定客户Email的订单
- Visual Studio 2015编译安装配置QT5.5.1(含QTWEBKIT)
- Qt浅谈之三十九圆形进度条
- Qt程序移植到ARM板上去掉鼠标样子
- Qt5.5中OpenGL着色器程序编写
- Ubuntu,QT5连接MySQL
- Qt的.pro工程文件语法学习
- QT子线程与主线程的信号槽通信
- osg3.4.0+Qt5.5.0 vs2013 64位编译成功