问题标签 [signals-slots]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - Qt 是如何实现信号和槽的?
有人可以向我解释 Qt 信号和插槽机制实现的基本思想吗?我想知道所有那些 Q_OBJECT 宏在“纯 C++”中做了什么。这个问题与信号和插槽的使用无关。
补充:我知道 Qt 使用 moc 编译器将 Qt-C++ 转换为纯 C++。但是 moc 是做什么的呢?我试图阅读“moc_filename.cpp”文件,但我不知道这样的东西是什么意思
c++ - 如果其中一个返回 true,是否有办法阻止 boost::signal 调用其插槽?
我正在使用 boost 库,我的问题是关于 boost::signals。
我有一个信号可能会调用许多不同的插槽,但只有一个插槽会匹配调用,所以我希望这个特定的插槽返回 true 并且调用将停止。
是否可以?
它有效率吗?
如果效率不高,你们能建议我更好的方法吗?
boost - 增强信号 - 如何控制发送给订阅者的对象的生命周期?智能指针?
我在 Red Hat Enterprise Linux 5.3 下使用 boost::signals2。
我的信号创建了一个对象副本并将其指针发送给订阅者。这是为了线程安全而实现的,以防止工作线程在读取对象的同时更新对象上的字符串属性(也许我应该重新考虑使用锁?)。
无论如何,我担心的是多个订阅者在他们自己的线程上取消引用指向复制对象的指针。如何控制对象的生命周期?我如何知道所有订阅者都已使用该对象并且可以安全地删除该对象?
提前感谢任何提示或方向,
-埃德
qt - 连接到 QMessageBox 隐藏的信号
我想向用户显示一个带有链接的警告 QMessageBox。这相对容易,我只需要确保我在消息框上设置了 RichText 文本格式,QMessageBox
其余的由设置完成。done()
但是,如果用户单击链接,我还想关闭消息框(如 some-sort-of-call-to ) - 语义是用户确认消息并做出决定。
问题:QMessageBox
隐藏linkActivated
来自其内部的信号QLabel
(用于存储文本)。
我想我可以扩展QMessageBox
类并在构造函数中做这个非常丑陋的黑客攻击:
但是虽然找到的标签findChild
不为空,并且"qt_msgbox_label"
绝对正确(从源代码复制),并且没有“没有这样的信号/插槽”消息,但当我单击链接时,我的插槽永远不会被调用。
我想避免自己编写QDialog
会模仿这种QMessageBox
行为的代码。有谁知道我如何捕捉到这个信号?
qt - 如何拦截Qt中给定事件发出的所有信号?
我可以想象,根据事件的不同,其中可能会有很多,但同时,我想这可能是调试的最佳方式,也是一个有趣的教训。
为什么我需要它?我正在使用一些基于 的自定义类,当我在同一窗口中QWidget
取消附加基于时,它不会扩展。QDockWidget
知道当这个停靠小部件被解除附加时会发出什么信号将帮助我选择我需要在我的自定义类中覆盖的方法。
换句话说,我不想检查文档中所有可能的信号,而只想查看在我的应用程序中执行某些操作时发出了哪些信号。
user-interface - Qt 跨线程发信号,一个是 GUI 线程?
在 Qt 中使用 moveToThread 将对象从一个线程移动到另一个线程是什么意思?甚至在使用 moveToThread 之前,一切似乎都正常工作,它将对象从一个线程(GUI 线程)移动到另一个线程(工作)并且 Qt:connect 调用对象上的适当插槽。
由于对象所在的位置、GUI 线程或工作线程有什么区别吗?
编辑:我做了一个小程序,但我不明白 QThread 如何与 Signal 和 slot 函数一起工作,如果你能用示例解释 moveToThread 的用途,我将不胜感激
c# - (如何)是否可以绑定/重新绑定方法以使用不同签名的委托?
我是一名 c++ 开发人员,在 c++ 中使用过信号和插槽,在我看来这类似于 c# 中的委托。我发现自己在搜索“绑定”提供的功能时不知所措,并且觉得我一定遗漏了一些东西。
我觉得像下面这样的东西,在 c++ 中是可能的,在 c# 中应该是可能的。这是我将在 C++ 中执行的一些伪代码:
不幸的是,我无法找到关于 c# 委托的绑定/重新绑定的任何参考。我错过了什么吗?在 c# 中是否有一些完全不同的方法可以做到这一点?
user-interface - 如何在不冻结 GUI 的情况下在单个插槽中实现阻塞进程?
假设我有一个事件并调用了相应的函数。此功能与外界交互,因此有时可能会有很长的延迟。如果函数等待或挂起,那么我的 UI 将冻结,这是不可取的。另一方面,必须将我的功能分解成许多部分并重新发出信号很长,并且可能会分解很多代码,这会导致难以调试和可读性降低,并且会减慢开发过程。事件驱动编程中是否有一个特殊功能可以让我只在一个函数调用中编写进程并能够让 mainThread 在等待时完成它的工作?例如,编译器可以识别一个关键字,然后实现一个返回,然后自动重新发出连接到新插槽的信号?为什么我认为这将是一个好主意;)我正在使用 Qt
c++ - QT 插槽得到信号两次
在 QT4.5 中,
我使用了 QTableWidget,并且我已经将信号 QTableWidget::itemClicked() 连接到了一个自定义插槽,如下所示:
我为添加到表中的每一行创建这样一个连接。
问题是插槽 sloItemClicked 被多次调用,似乎它被调用 X 次,其中 X 是我表中的行数。
但它一直在要求同一行。(我收到的 QTableWidgetItem 是一样的)。
这是一个问题,因为单击该行时,我将其删除。所以下次它被调用时,QTableWidgetItem 不再有效并且崩溃。
如果我只有一排,一切都会按预期工作..
任何想法?
谢谢
python - 未建立 PyQt4 QDialog 连接
我正在使用 PyQt4 及其提供的设计器开发一个应用程序。我有一个运行良好的主窗口应用程序,但我想创建自定义消息对话框。我设计了一个对话框并在方法中设置了一些自定义信号/插槽连接,__init__
并编写了一个if __name__=='__main__':
并进行了测试。自定义插槽工作正常。但是,当我从主窗口应用程序创建对话框的实例时,所有按钮都不起作用。这是我的对话框:
如果我运行这个类,它可以正常工作,并且按下 view_image_button 将 hello world 打印到控制台。但是,当我使用通话时
在我的主窗口类中,对话框正确显示,但单击时 view_image_button 什么也不做。我已经用谷歌搜索了一个解决方案,但找不到任何有用的东西。如果您需要更多信息,请告诉我。对此的任何帮助将不胜感激!
按照下面的要求,为了简洁起见,我的主窗口类中提供了更多代码,我添加了省略号以删除似乎不相关的代码。如果没有人能想到任何东西,我会添加更多。(如果缩进有点不对,就是复制粘贴的时候出现的,原码是对的)