我有一个小的Qt绘图应用程序,并且正在基于“主”组合框启用/禁用小部件(组合/旋转框)。例如,假设主服务器是combo1
,它会根据combo2
更改currentIndex()
中的条目,启用/禁用spin1
,如果选择了spin1
中的某个条目,则设置combo1
的值。但是,不仅有这些小部件还有更多。
在chat(及以后)中的小讨论之后,我将Qt::QueuedConnection
与每个connect()
一起使用,但这并没有阻止重新启用的小部件在重新启用后发出信号。这导致我的许多connect()
都针对所有重新启用的窗口小部件执行,导致出现多个绘图,我想避免这些绘图。就像现在一样,(几乎)所有小部件都在plot()
内使用connect()
,因此在一个插槽中有多个信号。
我的问题:有一种方法可以防止在重新启用小部件时发出信号?我可以让plot()
使用一些bool
来检查绘图是否已执行并阻止相同类型的进一步操作,但这仍然会导致小部件发出信号并运行plot()
,即使该检查将阻止实际绘图,但是那似乎不是要走的路。我还希望避免运行installEventFilter()
或类似的命令,因为这很可能会比以前的修复速度更慢。
最佳答案
每次连接之前都使用断开连接,以防止多个连接。始终允许断开未连接的插槽。
disconnect(spinbox1,...);
connect(spinbox1,...);
阻塞信号也是可能的,但我认为您需要第一个解决方案。
从QtDocumentation:
bool(boolean) QObject::blockSignals( bool(boolean) 块)
如果block为true,则阻止此对象发出的信号(即,发出信号将不会调用与其连接的任何对象)。如果block为false,则不会发生这种阻塞。
关于c++ - 启用/禁用QComboBox/QSpinBox时如何停止发出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41460061/