繁体   English   中英

如何在循环中运行 qt 主 window 避免 Qt app.exec() 阻塞主线程

[英]how to run qt main window in loop avoid Qt app.exec() blocking main thread

我是 Qt 的新手,但需要解决一个难题。

需要在循环中运行 qt 主 window ,其中 app.exec() 将阻塞主 function 直到收到退出。 但我想根据收到的事件在循环中显示和隐藏主 window 以隐藏和显示主 window

这是示例代码,现在我正在使用示例:

void main(int argc, char **argv)
{
  //QT window init
  w.setVisible(true);
  app.exec();
}

可以调用 qt window 的时间初始化并在循环中隐藏和显示吗?

我需要添加while循环,基于事件隐藏或显示主window将显示和隐藏

void main(int argc, char **argv)
{
  //QT window init
  w.setVisible(true);
  app.exec();
  while(1)
 {
  //if show status received 
    if(show)
     w.setVisible(true);
  // if hide window status received 
   else if(hide)
     w.setVisible(false);
 }
}

如何让 app.exe 一直处于活动状态以实现 window 的隐藏/显示? 还有其他 QT api 电话吗?

我已经通过这个链接

对于这种情况,Qt 推荐的解决方案是添加一个 QTimer 并将超时设置为零,这将保证您的回调在每个循环中都被调用。

要让您的应用程序执行空闲处理,即在没有未决事件时执行特殊的 function,请使用具有 0 超时的 QTimer。 使用 processEvents() 可以实现更高级的空闲处理方案。

https://doc.qt.io/qt-5/qapplication.html#exec

您可以 go 勇敢地继承 QApplication 并复制/粘贴 exec() 的源代码,但我强烈建议您不要这样做,因为其中的准备和清理代码可以在任何新版本中更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM