我使用此链接开始,[https://stackoverflow.com/a/11056698/5609063][1]
我正在尝试创建一个在内部创建GUI的对象,并自行清理。
我有一个quit()的调用,如果我想强行关闭或者我可以坐在.exec调用上直到主窗口关闭,让我关闭gui。
FooObj.h
class FooObj
{
public:
FooObj(FooObj *obj);
~FooObj();
private:
GUIApp *guiApp;
FooObj *m_fooObj;
}
FooObj.c
FooObj::FooObj()
{
guiApp = new GUIApp(this);
}
FooObj::~FooObj()
{
delete guiApp;
}
GUIApp.h
class GUIApp
{
public:
GUIApp(FooObj *obj);
~GUIApp();
private:
std::thread m_appThread;
void m_RunApp();
}
GUIApp.c
GUIApp::GUIApp(obj)
{
m_fooObj = obj;
m_appThread = std::thread ([this] {m_RunApp();});
}
GUIApp::~GUIApp()
{
if(m_appThread.joinable())
m_appThread.join();
}
void GUIApp::m_RunApp()
{
int argc = 1;
auto a = new QApplication(argc, NULL);
auto win = new FooObjGUI(m_fooObj);
win->show();
a->exec();
return;
}
在GUIApp中,有一个对FooObjGUI的调用,它使用FooObj来处理gui设置来处理我想要显示的所有数据以及我向用户公开的操作。
我的目的是让这个代码的用户不必担心qt并让它自己清理。
当我创建一个FooObj时,此代码在dll或exe中正常工作。我无法创建第二个FooObj,因为我无法创建第二个QApplication。我尝试了在一个单独的线程中启动a-> exec()的几个想法,但事件没有被处理,gui处于空闲状态。
有没有办法在单个dll中跨多个线程调用QApplication?是否有一种解决方法让两个FooObj使用相同的QApplication并且不阻止dll的执行?我目前唯一的解决方法是使用2个dll副本,但这不是一个好的长期解决方案。