用Qt发布的应用,每双击一次,都会打开一个软件,这可能会导致一些不良影响,比如:临界资源的访问。

    所以,我们希望无论双击多少次这个应用,都只会打开一个软件。

    这就需要使用qtsingleapplication。

    用法很简单,只要把src的代码添加到工程就可以使用了。

    但是qtsingleapplication默认使用Widget。

    对于Widget的应用,可以直接支持。

    对于使用QGuiApplication的Qml应用是不能直接支持的。所以,需要修改qtsingleapplication的源代码。

    如下图所示。

    在qtsingleapplication.h文件中,注释掉widget相关的代码,并添加QGuiApplication头文件。
    Qt单一实例进程——使用qtsingleapplication - 图1

    Qt单一实例进程——使用qtsingleapplication - 图2

    在qtsingleapplication.cpp,要注释掉上图对应的类、信号、槽。再把QtSingleApplication类改为继承QGuiApplication类。这里不一一截图。

    最后在main.cpp中,使用QtSingleApplication,如下图所示。
    Qt单一实例进程——使用qtsingleapplication - 图3