2013-08-07 27 views
1

我试图运行一个修改后的qt-programm作为库。我需要它不能阻止主要执行。如何异步运行整个QApplication?

所以我想要做的就是运行QApplication并开始执行主应用程序。我如何实现这一目标?

我的第一个想法是运行它在一个单独的线程。

void MyClass::execute() { 
    someClass = someClass::instance(); 
    std::thread t1(&MyClass::startApp, this); 
    someClass->someFunction(); 
    someClass->doMoreStuff(); 
} 
void MyClass::startApp() { 
    QApplication app(argc, argv); 
    app.exec(); 
    QCoreApplication::quit(); 
} 

但这会导致Call to '__invoke' is ambiguous错误。虽然我不知道为什么/在哪里__invoke被覆盖以及如何处理这个错误。 :(

那么,怎样才能做到我的QApplication的不阻塞的主要执行?

回答

0

设计模式是完全错误的,QApplication的以及QCoreApplication不应该一个应用程序内将成倍增加。你应该例如做的就是让自己的类,如:。

class LibraryCore: public QObject { 
} 

和替代品的QApplication这一类你未来的库源里面那你应该实现LibraryCore需要的方法使他们正常工作(这是内部应用程序中使用的)。 。

+0

感谢您的回答。所以你建议不要使用QApplication。当我尝试不使用它时,出现了几个错误,告诉我要创建一个QApplication。你能否更详细地解释你的计划? – Senad

+0

您打算将Qt应用程序移植到您想用于非Qt项目的库吗?这看起来不是一个好主意...... – evilruff

+0

是的,这就是我打算做的。我想在我的应用程序中使用PhantomJS。我需要访问PhantomJS WebPages。 – Senad