在循环中多次调用 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 是可能的。如果是,如何?的主要内容,如果未能解决你的问题,请参考以下文章

在循环中调用 setState 只会更新状态 1 次

多次连续调用ajax

Rxjava,改造和多次调用

为啥 componentDidMount 在 react.js 和 redux 中被多次调用?

在 Google Maps API v3.0 中多次调用 map.fitBounds()

如何在运行时阻止forEach循环不执行两次?