我已使用此链接开始,[ https://stackoverflow.com/a/11056698/5609063][1]
我正在尝试创建一个在内部创建其 GUI 并自行清理的对象。
如果我想强制关闭,我也可以调用 quit() 来关闭 gui,或者我可以坐在 .exec 调用上,直到主窗口关闭。
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 副本,但这不是一个好的长期解决方案。