Qt加载东西时阻塞信号

时间:2018-01-04 12:26:24

标签: c++ qt

我有一组设置(一些复选框),当我切换它时,某些文件将加载,但是当该文件加载时,我禁用了该组设置,我阻止了它们的信号。但是在我的文件被加载并重新启用我的小部件和信号之后它会触发信号,如果我试图切换一个复选框。

所以我的代码是这样的:

function (...)<br>
{
<br>DisableAndBlockSignals(true);
<br>LoadThatFile(); // it takes ~6 sec
<br>DisableAndBlockSignals(false);
<br>}

如果我在加载时从设置中切换一个复选框并且所有设置和信号都被禁用,则会在加载后触发我的插槽。

编辑:有什么解决方案在加载时我无法触发任何复选框?

1 个答案:

答案 0 :(得分:1)

问题是,您的文件加载会阻止事件。因此,只有在整个方法返回后才会收到鼠标单击事件。

试试这个:

首先在加载文件或mybe父级或父级父级或整个主窗口之前禁用此小组件。所有子窗口小部件也被禁用。

然后加载文件。

然后在文件加载后调用processEvents,因此鼠标事件会被传递但不执行任何操作。注意:如果你做错了,事件导致再次调用这个方法,重新输入,你就麻烦了。但是禁用小部件应该确保不会发生这种情况。

然后启用您禁用的小部件。

注意:如果文件加载需要很长时间,请研究QProgressDialog或使用单独的线程作为更好的解决方案。