在循环中多次调用 Qapplication.exec 是可能的。如果是,如何?
Posted
技术标签:
【中文标题】在循环中多次调用 Qapplication.exec 是可能的。如果是,如何?【英文标题】:Calling Qapplication.exec multiple times in loop is possible., if yes how? 【发布时间】:2012-02-08 06:08:44 【问题描述】:在循环中调用 Qapplication.exec 不会给出正确的结果。 有人可以给我一些其他的想法来做下面的事情..谢谢
类似的东西
public static void main(String args[])
QNetworkProxy proxy = new QNetworkProxy(ProxyType.HttpProxy,Proxyname, port);
QNetworkProxy.setApplicationProxy(proxy);
for(int i=0; i<2;i++)
QApplication.initialize(args);
HelloWebKit widget = new HelloWebKit();
widget.show();
QApplication.exec();
【问题讨论】:
【参考方案1】:QApplication.exec()
通常在您退出程序之前不会返回。 documentation 提到在某些情况下,控制可能不会返回到调用 QApplication.exec()
的代码。
如果您想同时运行两个 QApplication 实例,您可能需要调用两个单独的程序,或者使用不同的命令行参数调用同一个程序两次。
另一种可能性是使用两个线程,但如果您没有非常令人信服的理由,我不建议您这样做。
【讨论】:
【参考方案2】:QApplication 文档摘录:
QApplication 包含主事件循环,其中所有来自 窗口系统和其他源被处理和调度。
按照设计,应用程序中应该只有一个主事件循环。
exec
继承自 QCoreApplication。
QApplication.exec 进入主事件循环并等待 exit() 被调用。
多次调用 QApplication.exec 是无稽之谈。应该一劳永逸地完成。
【讨论】:
【参考方案3】:从 Qt/C++ 的角度来看,您的小部件都可以共享由 exec()
启动的同一个 Qt 消息泵。
public static void main(String args[])
NetworkProxy proxy = new QNetworkProxy(ProxyType.HttpProxy,Proxyname, port);
QNetworkProxy.setApplicationProxy(proxy);
QApplication.initialize(args);
for(int i=0; i<2;i++)
HelloWebKit widget = new HelloWebKit();
widget.show();
QApplication.exec();
话虽如此,我还没有使用 Qt Jambi,并且代码看起来不像这样运行。
【讨论】:
以上是关于在循环中多次调用 Qapplication.exec 是可能的。如果是,如何?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 componentDidMount 在 react.js 和 redux 中被多次调用?