这是我提出的关于在传统C应用程序中嵌入Qt代码的问题的后续内容。
我能够将Qt代码构建到我的C应用程序中,并且惊讶地发现我甚至可以从我正在使用的静态库中运行gui代码。 (顺便说一句,我的C应用程序也是GUI驱动的)。 这开辟了一些令人兴奋的可能性,我正试图让两个GUI并排工作。
我现在遇到的问题是,为了启动Qt GUI代码,我需要调用QApplication :: exec(),这有效地阻止了我的应用程序的其余部分,因为它直到我杀死qt gui才返回。
有什么方法可以启动qt gui代码并仍然返回我的主机应用程序?
我很欣赏我可以将我的Qt代码作为一个不同的进程启动并实现一些进程间通信,但重点是尝试将其嵌入为库。
在任何人建议之前,我也无法在Qt中托管遗留应用程序!
感谢您的帮助!
答案 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
这是一个非常粗略的例子,你应该正确地学习和学习线程。