Qt从库中调用QApplication :: exec

时间:2011-07-04 15:31:44

标签: c++ c qt user-interface

这是我提出的关于在传统C应用程序中嵌入Qt代码的问题的后续内容。

我能够将Qt代码构建到我的C应用程序中,并且惊讶地发现我甚至可以从我正在使用的静态库中运行gui代码。 (顺便说一句,我的C应用程序也是GUI驱动的)。 这开辟了一些令人兴奋的可能性,我正试图让两个GUI并排工作。

我现在遇到的问题是,为了启动Qt GUI代码,我需要调用QApplication :: exec(),这有效地阻止了我的应用程序的其余部分,因为它直到我杀死qt gui才返回。

有什么方法可以启动qt gui代码并仍然返回我的主机应用程序?

我很欣赏我可以将我的Qt代码作为一个不同的进程启动并实现一些进程间通信,但重点是尝试将其嵌入为库。

在任何人建议之前,我也无法在Qt中托管遗留应用程序!

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

不要调用QApplication :: exec()。而是让应用程序在其事件循环中调用QApplication :: processEvents()。

答案 1 :(得分:0)

好吧,你可以启动第二个线程(例如,使用pthread库)并从第二个线程启动QApplication :: exec()。但是,在与QT代码通信时必须非常小心,以免在库中出现竞争条件。

答案 2 :(得分:0)

你的问题的答案是线程。

由于您正在使用C,因此您可以使用 pthreads

void * qt_thread(void * parm) {
    // code here
    QApplication::exec();
} 

//some where in your main()
pthread_t qt;
pthread_create(&qt, NULL, qt_thread, NULL); //returns immediately
// rest of code

这是一个非常粗略的例子,你应该正确地学习和学习线程。

很好的参考: https://computing.llnl.gov/tutorials/pthreads/