最大化qt中单个实例应用程序的已运行实例

时间:2014-10-07 10:52:46

标签: c++ qt shared-memory single-instance

我已经创建了一个应用程序,只在qt中使用共享内存运行单个实例。
我的代码如下所示

int main(int argc, char *argv[])
{
    QSharedMemory sharedMemory;
    sharedMemory.setKey("4da7b8a28a378e7fa9004e7a95cf257f");
    if(!sharedMemory.create(1))
    {
        return 1; // Exit already a process running
    }
    QApplication a(argc, argv);
    Encoder *encoder = Encoder::instance();
    encoder->show();
    return a.exec();
}

现在,当他们尝试运行另一个实例时,我需要向用户显示已经运行的实例(最大化窗口)。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

使用QtSingleApplication进行简单设置:

QtSingleApplication app("myapp",argc, argv);

if (app.isRunning()) {
        QListIterator<QString> it(messagestosend);
        QString rep("Another instance is running, so I will exit.");
        bool sentok = false;
        while(it.hasNext()){
         sentok = app.sendMessage(it.next(),1000);
             if(!sentok)
                 break;
        }
        rep += sentok ? " Message sent ok." : " Message sending failed; the other instance may be frozen.";
        return 0;
}

要收到此消息,您应该使用所需的插槽收听信号

void QtSingleApplication::messageReceived(const QString&)