我有一个小的Qt绘图应用程序,并且正在基于“主”组合框启用/禁用小部件(组合/旋转框)。例如,假设master是combo1
,它将combo2
基于currentIndex()
,enable / disables更改中的条目spin1
,并为选择中spin1
的某个条目设置值combo1
。但是,不仅有这些小部件,还有更多的部件。
在聊天(及以后)中的小讨论之后,我使用Qt::QueuedConnection
了every connect()
,但这并没有阻止重新启用的小部件在重新启用后发出信号。这导致connect()
对所有重新启用的小部件执行全部任务,导致出现多个绘图,这是我想要避免的。就像现在一样,(几乎)所有小部件都plot()
在内使用connect()
,因此它向一个插槽发送了多个信号。
我的问题:当重新启用小部件时,有什么方法可以防止发出信号吗?我可以plot()
使用一些方法bool
来检查绘图是否已执行并阻止相同类型的进一步操作,但这仍然会导致小部件发出信号并运行plot()
,即使检查将阻止实际绘图,但这也不会好像是要走的路。我还希望避免运行installEventFilter()
或类似方法,因为这很可能会比以前的修复速度更慢。
每次连接之前都使用断开连接,以防止多个连接。始终允许断开未连接的插槽。
disconnect(spinbox1,...);
connect(spinbox1,...);
阻塞信号也是可能的,但我认为您想要第一个解决方案。
从QtDocumentation:
bool QObject :: blockSignals(bool block)如果block为true,则阻塞此对象发出的信号(即,发出信号将不会调用与其连接的任何对象)。如果block为false,则不会发生这种阻塞。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句