可以在循环中多次调用Qapplication.exec。如果是,如何?

时间:2012-02-08 06:08:45

标签: qt qt-jambi

在循环中调用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();
    }
    }

3 个答案:

答案 0 :(得分:2)

在您退出程序之前,

QApplication.exec()通常不会返回。 documentation提到控件在某些情况下可能无法返回到调用QApplication.exec()的代码。

如果要同时运行两个QApplication实例,则可能需要调用两个单独的程序或使用不同的命令行参数调用相同的程序两次。

另一种可能性是使用两个线程,但如果你没有一个非常令人信服的理由,我不建议这样做。

答案 1 :(得分:1)

摘自QApplication文档:

  

QApplication包含主事件循环,其中包含所有事件   窗口系统和其他来源被处理和发送。

按照设计,应用程序中应该只有一个主事件循环。

exec继承自QCoreApplication。

QApplication.exec进入主事件循环并等待直到调用exit()。

多次调用QApplication.exec是不存在的。它应该一劳永逸地完成。

答案 2 :(得分:0)

从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合作过,而且代码看起来并没有像这样运行。