找到单实例Qt应用程序的QWidget

cor*_*rné 2 c++ windows qt

我正在尝试创建一个单一实例Qt应用程序,我正处于这样的工作,但现在我想在启动第二个时关注已经启动的实例.QWidget :: find(g_hWnd)应该返回小部件,但它失败并在w-> show();崩溃;

有什么想法吗?

#pragma data_seg("Shared")
HWND g_hWnd = NULL;
#pragma data_seg()
#pragma comment(linker,"/section:Shared,rws")

int main(int argc, char *argv[])
{
    if (g_hWnd)
    {
        QWidget* w = QWidget::find(g_hWnd);
        w->show();
        return 0;
    }
    else
    {
        QApplication a(argc, argv);
        mainWindow w;
        w.show();
        g_hWnd = a.topLevelWidgets().at(0)->winId(); //or w.winId()?

        return a.exec();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我现在看到奇趣科技在LGPL下发布了QtSingleApplication类.

Mar*_*ett 10

您应该使用qtsingleapplication API

编辑 - 这是一个单独的下载, 请看这里的LGPL和商业版

  • QtSingleApplication不是任何版本的Qt的一部分.这是一个不受支持的附加组件,它们是出于他们内心的善良而提供的.你可以在这里找到它:http://www.qtsoftware.com/products/appdev/add-on-products/catalog/4/Utilities/qtsingleapplication/ (4认同)
  • 哦哇,上次我检查它只适用于商业版.我喜欢奇趣科技! (2认同)