我用这个链接让我开始,[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副本,但这不是一个好的长期解决方案 .