保证Qt程序只运行一个实例

一 使用 QSingleApplication
QSingleApplication是Qt提供的一个解决方案,它不包含在Qt 的library 中。遵循LGPL 协议。关于如何使用,下载了这个解决方案之后,里面有例子。还有,QtCreator 中还用到了它。你也可以翻一番QtCreator的源代码。

二 使用共享内存
将qt程序中的main.cpp中的main函数修改如下:

    int main(int argc, char *argv[])  
   {  
   QApplication a(argc, argv);  
   QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));  
   QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));  
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));  
   
   QSharedMemory mem("SystemName");//以系统exe名称为参数,定义共享内存mem  
   if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则弹出提示对话框,并退出  
   {  
   QMessageBox::information(0,QObject::tr("Warning"),QObject::tr("An instance is running"));  
   return 0;  
   }  
   MainWindow w;  
   w.show();  
   
   return a.exec();  
   }  

限制程序多开有时还是非常必要的!
解决中文化问题我都是只将QString设置成GBK的…

当使用QSingleApplication时,main函数里面不能再用QApplication的其它继承类了,否则,程序会出现一些莫名其妙的错误。

技术帖子顶起来,,:6_125:

顶起来,