2014-10-07 153 views
0

我已经创建了一个应用程序,只使用qt中的共享内存运行单个实例。
我的代码看起来像这样
最大化已在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

您可以使用共享内存的信号,还设置了运行实例中的标志告诉它最大化? – 2014-10-07 11:21:21

回答

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&) 
+0

谢谢,让我试试看。 – Sourabh 2014-10-07 11:30:25

+0

我建立了qtsingleapplication dll。你能告诉我如何在我的项目中使用它吗? – Sourabh 2014-10-07 11:44:20

+0

“使用”是什么意思?链接的DLL? – UmNyobe 2014-10-07 12:14:51

相关问题