Qt 在加载某些内容时阻止信号
Qt Blocking signals while loading something
我有一组设置(一些复选框(,当我切换它时,一些文件将加载,但是当该文件加载时,我禁用了这组设置,并且我阻止了他们的信号。但是在我的文件加载并重新启用我的小部件和信号后,如果我尝试切换一个复选框,它会以某种方式触发信号。
所以我的代码是这样的:
function (...)<br>
{
<br>DisableAndBlockSignals(true);
<br>LoadThatFile(); // it takes ~6 sec
<br>DisableAndBlockSignals(false);
<br>}
如果我在加载时从设置中切换一个复选框并且所有设置和信号都被禁用,它会在加载后触发我的插槽。
编辑:有什么解决方案,加载时我无法触发任何复选框?
问题是
,您的文件加载阻止了事件。因此,只有在整个方法返回后才会收到鼠标单击事件。
试试这个:
在加载文件、mybe 父项或父项的父项或整个主窗口之前,请先禁用此小部件。所有子小部件也会被禁用。
然后加载文件。
然后在文件加载后调用 processEvents,以便传递鼠标事件但不执行任何操作。注意:如果您做错了事情并且事件导致再次调用此方法,重新输入,那么您就有麻烦了。但是禁用小部件应该确保不会发生这种情况。
然后启用您禁用的小部件。
注意:如果文件加载需要这么长时间,请研究QProgressDialog或使用单独的线程作为更好的解决方案。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 使用 sv hup SIGHUP 信号重新加载配置时出现问题
- 使用 dlopen 在 Mac 上加载 libjvm.dylib 时发出信号 SIGSEGV
- Qt 在加载某些内容时阻止信号
- Qt 如何获取发送者信号的发送者或如何知道 QWebEngineView 的加载启动网址
- C++Linux二进制终止信号SIGKILL-为什么?(加载在GDB中)