关于Qt QObject::sender()函数的一点问题

大风哉 2017-12-13 11:02:35
我在查看QObject* QObject::sender()const的QT文档时有一点疑问,请大家帮忙看看。

这个接口是返回信号发送对象的指针,文档中写了“The pointer is valid only during the execution of the slot that calls this function from this object's thread context.”,这里的“this object”是指接收者对象吗?这句话是不是可以这样理解“这个指针只有在当前接收者对象的线程上下文才有效”?

在下文中“Warning: As mentioned above, the return value of this function is not valid when the slot is called via a Qt::DirectConnection from a thread different from this object's thread. Do not use this function in this type of scenario.”是不是说“当使用Qt::DirectConnection设置信号与槽的模式时,返回的发送者指针是不合法的,因为slot执行时所在线程和signal线程一致,和接收者对象所在线程不同”

这样就是说这个接口返回的发送者对象指针只有在接收者对象所在线程中执行slot函数过程中才有效?有没有接收者和发送者在同一个线程的情况,如果发生这种情况是不是就是无效了?


QT原文链接:http://doc.qt.io/qt-5/qobject.html#sender
...全文
730 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大风哉 2017-12-15
  • 打赏
  • 举报
回复
引用 2 楼 dext 的回复:
this object 指的就是sender,因为slot运行的线程可能和 signal 发送的线程不一样。也就是说,slot和signal 要同一线程 第二个问题和 第一个类似,如果不在同一线程 又使用的是直连 那这个方法是无效的。相当于跨线程修改UI
引用 2 楼 dext 的回复:
this object 指的就是sender,因为slot运行的线程可能和 signal 发送的线程不一样。也就是说,slot和signal 要同一线程 第二个问题和 第一个类似,如果不在同一线程 又使用的是直连 那这个方法是无效的。相当于跨线程修改UI
感谢你的回答。 因为在slot函数内部使用的这个sender()函数,所以我一开始以为this是指接收者对象的指针。这样方向就反了。
dext 2017-12-13
  • 打赏
  • 举报
回复
this object 指的就是sender,因为slot运行的线程可能和 signal 发送的线程不一样。也就是说,slot和signal 要同一线程 第二个问题和 第一个类似,如果不在同一线程 又使用的是直连 那这个方法是无效的。相当于跨线程修改UI
大风哉 2017-12-13
  • 打赏
  • 举报
回复
顶一个先!!

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧