Qt 在加载某些内容时阻止信号

Qt Blocking signals while loading something

本文关键字:信号 加载 Qt      更新时间:2023-10-16

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

所以我的代码是这样的:

function (...)<br>
{
<br>DisableAndBlockSignals(true);
<br>LoadThatFile(); // it takes ~6 sec
<br>DisableAndBlockSignals(false);
<br>}
如果我在加载

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

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

问题是

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

试试这个:

在加载文件、mybe 父项或父项的父项或整个主窗口之前,请先禁用此小部件。所有子小部件也会被禁用。

然后加载文件。

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

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


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