QT程序运行单个实例 |
您所在的位置:网站首页 › 取消电脑自动关机设置 › QT程序运行单个实例 |
http://blog.sina.com.cn/s/blog_6343941a0100nk2x.html
可以达到的目的: 1、应用只启动一个实例,依赖于QtNetwork模块 2、启动时向另一个实例通信
下载地址:http://qt.gitorious.org/qt-solutions/qt-solutions/archive-tarball/master 解压开后,将里面的qtsingleapplication目录拷贝到项目的源码目录中,然后修改项目的.pro文件,加入下面一行代码 ============== include(../qtsingleapplication/src/qtsingleapplication.pri) ============== 修改main.cpp文件,加入头文件 #include
main函数实现: =================================== QtSingleApplication app(argc, argv); if (app.isRunning()) { app.sendMessage("raies"); return EXIT_SUCCESS; } ........ QMainWindow w; app.setActivationWindow(&w); ....... ===================================
为了使一个应用程序在同一时间只运行一个实例,需要用某种方法在程序启动时,检测是否已有正在运行的实例,如果有,则将本次启动的参数传递给前一个实例(例如需要打开的文档的路径),如果没有,则正常启动。 实现的方法有多种: 1. 用Windows API创建一个互斥量: #include int main(int argc, char *argv[]) { QApplication a(argc, argv); HANDLE hMutex = CreateMutex(NULL, TRUE, L"YourApp"); // 创建一个互斥量来保证只运行一个实例 if(hMutex != NULL) { if(GetLastError() == ERROR_ALREADY_EXISTS) { QMessageBox::critical(qApp->activeWindow(), QObject::tr("An instance of this application has been run!"), QObject::tr("Only one instance can be run at a time!")); return 1; } } ... // 以下是正常启动代码 } 注:如果保险起见,CreateMutex()中的字符串应该用一个GUID来保证其唯一性,Visual Studio中有一个生成GUID的工具,菜单“工具”->“创建GUID”,选择合适的定义形式,创建并拷贝到剪贴板即可。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |