⑴ QT中同一个程序的可执行程序只能运行一个,如何实现
在windows下互斥体有个唯一的key,通过key去创建互斥体,如果这个互斥体已经存在了,那么通过GetLastError能获取到这个信息,表示程序已经在运行了。互斥体还有个优点就是在程序关闭时,会自动释放掉!
#include "mainwindow.h"
#include <QApplication>
#include <windows.h>
int main(int argc, char *argv[]){
QApplication a(argc, argv);
QString strKey = "mykey";
LPCWSTR wstrKey = strKey.toStdWString().c_str();
HANDLE hMetex = CreateMutex(NULL,FALSE,wstrKey);
if(GetLastError() == ERROR_ALREADY_EXISTS){
//如果互斥体存在,说明程序已经有实例在运行了,释放资源然后关闭本实例
if(hMetex){
CloseHandle(hMetex);
hMetex = NULL;
}
return -1;
}
MainWindow w;
w.show();
return a.exec();
}
⑵ linux下如何运行qt程序
图形界面下,直接下载qtcreate,libqt4-dev,qt5defaule-dev 第一个是编辑软件,后两个是库,如需其他另外找。命令行模式的话,不知道怎么在没有图形界面下运行对话框的程序,命令行模式运行qt命令行格式的,直接qmake,make。就可以了。里面那个没有后缀的就是运行程序了,./程序名 运行 不行就加权限 chmod +x ***.
⑶ 怎样才能不启动gnome桌面,单独运行QT程序
嘛。。你可以在X的设置文件里删掉登陆管理器(gdm kdm什么的。。)然后就在TTY里startx进入X输命令运行QT程序~
这里有Arch官网的教程,理论上通用(配置文件位置也许会不同,Google一下吧`)
https://wiki.archlinux.org/index.php/Display_Manager_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
好好折腾~
⑷ qt怎么部属
华开发
原创
关注
2点赞·1821人阅读
Qt程序编写完成后,我们应该怎么给其他人安装呢?其实我们只需要知道Qt程序所依赖的动态库就可以直接拷贝将exe和动态库拷贝到其他人电脑上直接运行(也就是传说中的绿色免安装版)。Qt所依赖的动态库我们通过部署来获取。Qt程序部署有两种方式,一种通过QtCreator获取,另外一种是在cmd窗口使用windeployqt命令获取。
1.QtCreator部署exe程序
我们首先新建一个Test工程(如果对如何创建工程不清楚可参考Qt第一个例程)。
首先我们先不部署看一下生成目录中包含哪些文件。
在该文件夹中实际上只有Text.exe有用,其他都为中间文件可以删除。
接下来我们看如何使用QtCreator部署程序。新建完成后构建->部署项目”Test”按钮是不可用状态,需要我们先设置一下部署流程。
点击左侧项目按钮,主窗口切换到构建界面。再次点击左侧Run按钮,主窗口就切换到运行设置界面。在此界面,点击添加部署步骤,选择自定义处理步骤。
在命令编辑框可以输入windeployqt。
在参数编辑框中点击右侧的A->B按钮。
这时会弹出参数的一个选择界面。在这个地方我选择了CurrentRun:Executable:FilePath这个参数。在界面下方我们可以看到这个参数代表的是E:/qt/build-Test-Desktop_Qt_5_11_2_MSVC2017_64bit-Debug/debug/Test,也就是执行程序所在路径和执行程序的名称。
但实际上我们还需要在该参数后面加个.exe,表示这是执行文件。在有的版本中可以找到直接带exe的参数,但本人使用的Qt 5.11.2中没有找到。如果有知道的朋友可以留言告知一下。
到这个时候我们的部署步骤就添加完成。接下来我们再找到编辑界面。只需点击左侧的编辑按钮即可。
然后在项目上右键点击,选择部署按钮。
在编译输出窗口看到以下信息说明部署完成。
接下来我们再看一下构建目录下的文件。这个时候我们发现这个目录下会多出很多dll文件。这就是我们执行文件所以来的动态库。我们把这个文件夹拷贝给用户,用户点击exe就可以运行了。但这种方式有个弊端就是会有很多中间文件,比如main.obg,mainwindow.obj等。我们需要把这些文件删除或者写个脚本删除这个文件。
2.cmd窗口部署exe程序
在cmd窗口部署exe程序之前,我们需要将windeployqt所在路径配置到环境变量中。
右键点击计算机,选择属性,弹出下面的对话框,选择高级系统设置。
在系统属性中选择高级->环境变量。
选择系统变量的Path变量,点击编辑。
将windeployqt所在路径添加到变量值中(需要注意要在路径前添加;)。Windeployqt默认路径为C:\Qt\Qt5.11.2\5.11.2\msvc2017_64\bin。C:是我的Qt安装盘符,这个需要根据大家自己的路径选择。msvc2017_64是我使用的编译器。每个编译器下都有自己的Windeployqt。添加完成后点击确定按钮。准备工作已经做完了,我们可以开始部署程序。
首先我们将exe程序单独拷贝的一个文件夹中。
我们使用快捷键win+R打开运行界面,输入cmd点击回车。
还有另外一种方法是直接在文件夹路径位置输入cmd,点击回车。
这时打开的路径就是exe所在路径,否则需要先跳转到exe所在路径。
在cmd窗口输入windeployqt Test.exe,然后点击回车。
看到如下信息就说明部署已经完成。我们只需要将此文件夹拷贝给用户即可。
3.总结
Qt程序部署看似两种方法其实核心是一致的,都是调用windeployqt生成所需动态库,只不过是使用Qt Creator方法配置完成后只需点击按钮即可,更为方便一些。
⑸ qt如何让控件在单独线程运行
QWidget的子类(包括QWidget)只能在GUI线程创建对象。
Qt把QApplication的对象所在线程作为GUI线程,一般情况下是程序的主线程(即main函数所在线程)
⑹ qt程序运行后生成的exe文件如何单独执行
你可以在pro文件里指定exe文件的输出路径,比如destdir
+=
d:/output,编译后,指定的文件夹里就只有那个exe文件了。
另外,其他的编译临时文件不可能不会生成。
⑺ qt可编译运行但不能独立运行linux
出问题的exe名称为TestApp.exe,在Visual Studio下编译运行都正常,但无法直接点击exe运行。报错为(应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序)
本人环境:基于visual studio IDE下的QT编译器,共有四种,在 qt-版本号 文件夹下。
我的问题解决步骤如下:
1.看准自己项目的编译环境
我电脑虽然是64位的,但是编译器环境是32位的,故之后所有都需要以32位为标准
由于是Visual Studio ,所以采用下面文件夹中的msvc2017环境进行编译(没有标注64位就是32位)
2.添加系统环境变量
打开控制面板搜索环境变量,对系统path进行更改
按照上一步的环境进行配置!!!不要添加冗余路径,一项即可!!
PS:多项也可以,但是要在IDE中选择正确的default编译器,不然系统会搞混64和32位的dll
3.进入qt自带的命令行中
开始框中搜索 → 选择合适的环境(比如我是MSVC 2017 32-bit)→ 进入目标exe程序所在文件夹
输入命令
windeployqt xxx(目标exe名称)
复制
PS:该命令(windeployqt)若添加了系统Path后,也可以直接在系统cmd中运行,前提是:环境Path只有适合自己项目的那一项!!(only 32 or 64) 否则系统会弄混。。。然后就又失败链接了qaq
此时,在exe的文件夹下面会多出很多文件夹和dll文件,表明已经link成功
再次强调:不同位数的编译器链接出来的dll不同!一定一定要适合自己的程序
⑻ linux下qt程序如何编译运行说的详细点!!!!急急急!!!
1 需要保证linux下要安装了qt环境
2 进入你的程序目录,运行 /usr/local/qt_install/bin/qmake xxxx.pro。 其中/usr/local/qt_install是qt安装目录. xxxx.pro是你应程程序中的pro文件
3 执行make
4 运行生成的bin文件
⑼ 如何在windows下运行QT程序
使用Release 模式编译后,release 的目录下包含 Hello1.exe 可执行程序。如果我们需要发布这个程序,那么还需要 QT 的运行库,包括哪些呢?拿一台干净的机器一个个试,终于把这些 Qt 库给找出来,成功运行 QtCore4.dll QtGui4.dll mingwm10.dll libgcc_s_dw2-1.dll 其中要特别注意的是,这些文件应该从 Qt 安装目录下的 [QT安装目录]\qt\bin 子目录中获取,因为[QT安装目录]\bin 也有同样的文件,但是无效。这里仅限 Windows 系统,其他非 Windows 系统尚未研究。不过也碰到一个小问题, Hello1 程序中有这么一行代码:QStringgbk_msg=codec->toUnicode("你确认要退出HelloQt程序吗?
⑽ qt无ui界面双击直接运行
1、首先是下辖程序实现想要的界面效果,运行时需要加载rcc文件。
2、其次如果通过vs运行,需要把rcc文件放到工程目录。
3、最后如果通过双击exe运行程序,需要把rcc文件放到exe所在目录。