如何在再次打开应用程序时显示应用程序Qt

时间:2014-11-12 08:54:01

标签: c++ qt

现在,我有一个应用程序,但我不想打开应用程序两次,因此我在打开两次时使用QShareMemory来检测应用程序。 我的问题是:当用户打开第二个应用程序时,我如何在屏幕上显示当前应用程序?

int main(int argc, char *argv[]) {
    Application a(argc, argv);

    /*Make sure only one instance of application can run on host system at a time*/
    QSharedMemory sharedMemory;
    sharedMemory.setKey ("Application");
    if (!sharedMemory.create(1))
    {

        qDebug() << "123123Exit already a process running";
        return 0;

    }
    /**/

    return a.exec();
}

感谢。

2 个答案:

答案 0 :(得分:4)

这是纯Qt方式的另一种方法:

使用QLocalServerQLocalSocket检查应用程序是否存在,然后使用信号槽机制通知现有应用程序。

#include "widget.h"
#include <QApplication>
#include <QObject>
#include <QLocalSocket>
#include <QLocalServer>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    const QString appKey = "applicationKey";

    QLocalSocket *socket = new QLocalSocket();
    socket->connectToServer(appKey);

    if (socket->isOpen()) {
        socket->close();
        socket->deleteLater();
        return 0;
    }
    socket->deleteLater();

    Widget w;
    QLocalServer server;

    QObject::connect(&server,
                     &QLocalServer::newConnection,
                     [&w] () {
        /*Set the window on the top level.*/
        w.setWindowFlags(w.windowFlags() |
                         Qt::WindowStaysOnTopHint);
        w.showNormal();
        w.setWindowFlags(w.windowFlags() &
                         ~Qt::WindowStaysOnTopHint
                         );
        w.showNormal();
        w.activateWindow();
    });
    server.listen(appKey);

    w.show();

    return a.exec();
}

但如果您在Windows上使用Qt 5.3,则QWidget::setWindowFlagsQt::WindowStaysOnTopHint存在错误,请参阅https://bugreports.qt.io/browse/QTBUG-30359

答案 1 :(得分:0)

只需使用QSingleApplication类而不是QApplicationhttp://doc.qt.digia.com/solutions/4/qtsingleapplication/qtsingleapplication.html

int main(int argc, char **argv)
{
    QtSingleApplication app(argc, argv);
    if (app.isRunning())
        return 0;

    MyMainWidget mmw;
    app.setActivationWindow(&mmw);
    mmw.show();

    return app.exec();
}

它是Qt Solutions的一部分:https://github.com/qtproject/qt-solutions