我已经创建了一个应用程序,只在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();
}
现在,当他们尝试运行另一个实例时,我需要向用户显示已经运行的实例(最大化窗口)。我怎样才能做到这一点?
答案 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&)