【发布时间】:2015-10-05 22:26:50
【问题描述】:
我在我的 Qt 程序代码中使用以避免打开第二个实例:
#include "mainwindow.h"
#include <QApplication>
#include <QSharedMemory>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
const char* MEM_KEY = "42";
QSharedMemory sharedMem(MEM_KEY);
if (sharedMem.create(1024))
{
qDebug() << "Create shared memory";
}
else
{
if (sharedMem.error() == QSharedMemory::AlreadyExists)
{
qWarning() << "Already create. Exiting process";
return 1;
}
}
MainWindow w;
w.setWindowFlags(Qt::MSWindowsFixedSizeDialogHint);
w.show();
return a.exec();
它可以工作(此代码块打开我的应用程序的第二个实例[它自动关闭]),但我想将消息或信号从打开的第二个实例发送到第一个实例以执行 ex。最大化第一个实例的窗口。你能告诉我如何简单地做到这一点吗?
【问题讨论】:
-
你能解释一下吗?我是 Qt 的初学者,我不明白你的代码在做什么。 “它有效” .. 什么有效?我的意思是“避免打开第二个实例”,您通常不需要做任何事情(......除了不打开第二个实例)而且我在代码中看不到任何其他实例。
-
我已经编辑了我的帖子。你现在明白了吗?
-
我不是 100% 确定。你……当程序第一次启动时,用一个键(42)创建一些共享内存。当它第二次创建时,创建这个共享内存将失败(因为它已经存在)并且你退出应用程序......?如果是,我有 2 个 cmets: 1) 如果其他应用程序已经使用相同的密钥创建了一些共享内存怎么办? 2) 你不能用这个共享内存来传递消息吗?
-
请查看@Amartel 的回答。它解决了我的问题。我的代码很糟糕:/