如何使用QtSingleApplication?

时间:2013-07-30 03:03:51

标签: qt

  1. MacOSX10.8 + Qt5.1 with clang 64bit
  2. 创建Qt Gui应用程序
  3. 在main.cpp中我只需添加#include <QtSingleApplication>

  4. 编译错误:

    ../untitled/main.cpp:3:10: fatal error: 'QtSingleApplication' file not found
    #include <QtSingleApplication>
             ^
    1 error generated.
    make: *** [main.o] Error 1
    

    我错过了什么?


    补充资料
    项目文件已设置QT += widgets

    我已经谷歌,似乎需要qtlocalpeer.cpp,qtlocalpeer.h,qtsingleapplication.cpp, qtsingleapplication.h,qtsinglecoreapplication.cpp,qtsinglecoreapplication.h,但如何生成这些文件?

    有些帖子说需要包含qtsingleapplication.pri,但它在哪里?我搜索了我的磁盘,我找不到它。


    参考
    SinleApplication from Qt

    QtSingleApplication Class Reference

    Sample by Qt但是在哪里下载源代码?

3 个答案:

答案 0 :(得分:5)

如果您正在寻找QtSingleApplication课程的更好替代方案,尤其是Qt5QtQuick,请查看我的SingleApplication实施方案。它使用QSharedMemory来确保不会出现竞争条件,并且非常易于使用。您只需将QApplication的号码替换为SingleApplication,如下所示:

#include "singleapplication.h"

int main(int argc, char *argv[])
{
    QApplication::setApplicationName("{Your App Name}");
    QApplication::setOrganizationName("{Your Organization Name}");

    SingleApplication app(argc, argv);

    return app.exec();
}

它还使用本地套接字通知您的原始(第一个)进程初始化新的进程,以便父进程可以引发它的窗口。要唯一标识本地套接字的程序,我使用指定的Organization NameApplication Name

由于实现独立于 Qt Application类,因此可以通过QCoreApplication宏轻松更改为QGuiApplicationQAPPLICATION_CLASS

完整文档和代码可在GitHub上找到:itay-grudev/SingleApplication

答案 1 :(得分:4)

QtSingleApplication不是Qt的官方部分,而是一个如果人们感兴趣的话就与它一起发布的课程。 (所有“ Qt解决方案”都是其他类,实际上并不是官方Qt库的一部分)

它不仅不是Qt的一部分,而且Qt现在是第5版,它依赖于已弃用的Qt4函数。您可能需要自己编写,或修改其他人的代码。 Here would be a good place to startQt Solutions Archive中可能还有更新版本。

要问的一个重要问题是:您的应用真的是否希望强制用户 永远不会拥有多个一次运行的应用程序副本?

这样做只是因为它很酷并不会对用户有益。您正在删除Windows中内置的非常好的功能,妨碍您的应用程序的使用 - 所以在决定它是您真正想要添加的内容之前请仔细考虑! 最好添加功能,而不是删除它们,除非在这种情况下你无法提供帮助。如果你无法帮助它,无论这个成本的哪些功能,损失,都会让用户更有价值! =)

答案 2 :(得分:0)