1、下载QT安装包
或者http://download.qt.io/archive/qt/
选择一个你需要的版本,例如 5.10
点击进去后,选择对应操作系统的安装包下载,例如qt-opensource-windows-x86-5.10.0.exe
2、安装QT
安装包下载好后,双击运行,根据提示一步步往下走即可
在选择要安装的组件时,可能需要注意了,可以用两种编译器编译QT程序,一个是Visual Studio,另外一个是MinGW,是Minimalist GNUfor Windows的缩写。
如果选择了Visual Studio作为编译器,就必须安装对应版本的Visual Studio,刚开始我是安装Visual Studio2015,但是发现VS 太大了,十几个G,安装之后C盘所剩无几。虽然安装时选到了其他盘,但是大部分仍然还是被装到了C盘,卸载的时候也很无奈,得从控制面板中一个个卸载。
虽然安装QT时选择了MSVC组件,但是Visual Studio编译器并没有一起安装,因为Visual Studio是微软的软件,QT是不敢把它集成到自己的安装包中,但是如果选择了MinGW,就会在安装上MinGW编译器,因为MinGW是开源的。
3、创建一个工程
安装好后,双击QtCreator运行
选择新建一个工程,可以选择Qt Widgets Application
选择Qt Widgets Application 模版后,编译运行起来就能看到一个简单的界面
点击左下角的三角图标编译和运行你的程序,这时候就会弹出一个窗口,如果是要编译出正式版本的exe,可以编译出release版本
在项目界面中的构建配置中选择成release,默认是debug,release版本编译出来的exe会比debug版本的文件要小。
同样的点击三角形运行图标后,会在对应的目录下生成exe文件,这个exe文件双击之后还是无法运行的,因为缺少一些dll文件,那么我们怎么知道还缺少什么dll文件,可以用QT自带的工具来完成。
运行该该程序
切换到一个空目录下,同时把QT编译出来的exe文件拷贝到这个目录下,然后输入windeployqt ProgramName.exe
运行完之后,会在该目录下生成需要的文件,这时再双击exe文件,就可以之前运行程序了,同样把该目录下的所有文件拷贝到其他电脑上,也可以直接运行。
如果觉得在命令窗口中输入命令很麻烦,也可以使用如下脚本来帮助生成依赖文件
qt_pack.bat
@echo off
rem set current dir
set cur_dir=%cd%
rem Setting up environment for Qt usage...
set PATH=D:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin;D:/Qt/Qt5.10.0/Tools/mingw530_32\bin;%PATH%
rem set windeployqt tool path
set windeployqt=D:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin\windeployqt.exe
for /f "delims=\" %%a in ('dir /b /a-d /o-d "%cur_dir%\*.exe"') do (
for /f "delims=.exe tokens=1,*" %%i in ("%%a") do (
rem if dir is exist ,remove firstly
if exist %cur_dir%\%%i (
rd /s /Q %cur_dir%\%%i
)
rem create dir
md %cur_dir%\%%i
rem move exe file to designated dir
move %%a %cur_dir%\%%i\%%a
rem execute windeployqt
%windeployqt% %cur_dir%\%%i\%%a
)
)
rem wait for input
pause
将上面的内容拷贝到一个.bat的脚本文件中,放在一个空目录下,把QT编译出来的exe也放在这个目录下,运行脚本即可
上述脚本中set PATH 需要改成QT对应的安装目录,注意后面的路径是/
set PATH=D:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin;D:/Qt/Qt5.10.0/Tools/mingw530_32\bin;%PATH%
脚本中的 windeployqt 也需要改成QT对应的安装目录
set windeployqt=D:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin\windeployqt.exe
编写脚本遇到的问题
for /f "delims=.exe tokens=1,*" %%i in ("%%a")
遍历当前目录下的exe文件,依次调用windeployqt 给对应的exe 生成依赖文件,需要先在当前目录下创建一个文件夹,文件夹的名称就是exe对应的文件名,外面的一个for循环可以得到exe的文件名和后缀,例如Qwind.exe,这个值存在%%a中,我需要把%%a中的.exe去掉,只保留Qwind,所以写了第二个for,用于得到.exe前面的字符串。
一开始写成 in (%%a) ,结果死活运行不正确,后面加了单引号'%%a' 也不正确,最后改成了双引号才没有问题。