Mingw/Visual Studio + Qt5 开发环境搭建

一, QT框架介绍

Qt 框架是一套跨平台的UI界面开发框架,支持C++语言快速开发出能够具有平台移植的图形界面。相比传统的Win32 /MFC图形界面开发,QT库具有更加优雅简洁的封装性,并且提供了丰富的标准控件和功能接口,并且对许多操作系统的机制进行了封装,能够让开发人员关注与业务和图形逻辑实现。

Qt 框架相比主流的桌面图形开发框架例如WPF/WinForm, 由于WPF和WinForm都是基于微软的.Net Frame和C#语言来实现,虽然说微软也提供了强大的WPF/WinForm图形库,能够简单迅速开发出图形界面,但是由于微软具有很强的技术绑架性,一旦上了微软的产品线,技术扩展性就大大降低,而且微软公司又是一个喜欢打脸的公司,例如参考早期的COM技术 以及半死不活的MFC技术还有Win Phone,鸡肋的UWP等等(虽然WinForm和WPF目前看下来是挺成功的)。本着OpenSource的精神以及C++程序员的素养,以及考虑QT库强大的功能和强伸缩性(Qt5开始的QML支持和WPF一样的基于XML格式来配置用户界面,已经支持Web UI),决定采用Qt图形库做为产品的扩展界库使用。


二, 环境搭建

1. 安装qt-windows-mingw版 或者安装MSVC版(Visual Studio)

mingw是一个基于GPL的开发版是完全免费的。

msvc版允许和微软的Visual Studio进行集成迅速开发复杂的企业级应用。两者所依赖的运行库完全不同。由于公司是基于Visual Studio来开发产品的,因此这里采用msvc版本。

如果从一开始就考虑扩展和跨平台,应该优先考虑mingw版。


2. 环境配置(最重要的qtenv2.bat 很多编译连接错误都是因为这个)

安装完毕以后需要进行简单的配置。

首先是环境变量: 参考 https://jingyan.baidu.com/article/17bd8e5234b79a85ab2bb8be.html

配置成功以后打开任何一个CMD窗口,运气Qmake应该会显示类似以下的界面

Mingw/Visual Studio + Qt5 开发环境搭建_第1张图片


3. Visual Studio下调试报告Assert错误问题。

在Vs下新建一个Qt Gui Application的工程测试一下Hello Word。

#include
#include

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
return app.exec();
}


编译运行,出现assert错误。

Mingw/Visual Studio + Qt5 开发环境搭建_第2张图片

原因是注册表中有一个字体相关的键值,在中文的Windows下名字是simsum,而实际运行时候的alias名字是"宋体"

这就引发了一个assert,解决方案是删除一下键值

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\GRE_Initialize]

"GUIFont.Facename"="SimSun"

把该值删除以后可以解决此问题。


三,通用编译项目配置。

由于Visual Studio工程建立的Qt资源不太适合发布,而且VS本身不属于GPL协议,因此通常网上免费发布的Qt开源项目通常是GPL协议的。

这就需要使用GPL系的Toolchain来编译Qt项目

1. 执行以下命令

qmake -project

2. 在生成的pro文件中增加一下这一行

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets


因为Qt5修改了架构将QtGui组建移到了QtWidget下,而默认的工程配置不会加入QtWidget如果使用命令行编译会有大量的错误。需要加入这行

3. 执行以下命令

qmake xxx.pro


会生最终需要编译的make文件

4. 执行mingw32-make编译即可(windows系统上还可以用Clang)如果在linux和MacOsx上需要使用当前平台的主力编译器


5. 转换成visual studio project的问题。使用qmake默认转换会有一大堆问题,参考了一个网上的脚本。转换以后编译好运行都没什么问题。

参考地址: http://www.cnblogs.com/cui-shaoqiang/p/5524965.html

@echo off
if "%QTDIR%"=="" (
    @echo "QTDIR" environment variable is not configured
    pause
    exit
)
set bootDir=%cd%
set tagName=temp
set tagSubEx=bat
set file=%tagName%.%tagSubEx%
@echo %cd%
for /r %%i in (*.pro) DO (
    @echo %%i
    call :create %%i
)
pause
cd %bootDir%
set delFile=del.bat
rem set /a flag=0
echo @echo off>%delFile%
rem echo set flag=^0>>%delFile%
echo for /r %%%%j in (*%file%) DO (>>%delFile%
echo call :delete %%%%j>>%delFile%
echo )>>%delFile%
rem echo set /a flag+=^1>>%delFile%
echo :delete>>%delFile%
echo del %%1>>%delFile%
call %delFile%
cd %bootDir%
del %delFile%
exit
:wait
if %flag% equ 1 (
@echo flag=%flag%
pause
del %delFile%
exit
) else (
@echo this is working
pause
goto wait
)
:create
cd %~dp1
echo @echo off>%file%
echo set expQTDIR=%%QTDIR%%>>%file%
echo %%QTDIR%%\bin\qmake -tp vc>>%file%
echo set tagEx=vcxproj>>%file%
echo for /r %%%%j in (*.vcxproj) DO (>>%file%
echo call :replace %%%%j>>%file%
echo )>>%file%
echo :replace>>%file%
echo setlocal Enabledelayedexpansion>>%file%
echo ren %%1 a.%%tagEx%%>>%file%
echo for /f "tokens=*" %%%%s in (a.%%tagEx%%) do (>>%file%
echo set var=%%%%s>>%file%
echo set var=!var:%%expQTDIR%%=%%%%QTDIR%%%%!>>%file%
echo echo !var!^>^>b.%%tagEx%%>>%file%
echo )>>%file%
echo del %%~nx1>>%file%
echo ren b.%%tagEx%% %%~nx1>>%file%
echo del a.%%tagEx%%>>%file%
echo endlocal>>%file%
echo exit>>%file%
start %file%
:continue


四,其他配置

1. Visual Studio 配置

vs中遇到最多的就是不会生成mocxxx.cpp最后导致连接出现一大堆问题

解决方法如下:对于未自动生成编译的文件右键属性,选择Custom Build 并将内容修改如下

Mingw/Visual Studio + Qt5 开发环境搭建_第3张图片

Command Line:"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp"  -DUNICODE -DWIN32 -DWIN64 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB  "-I.\GeneratedFiles" "-I." "-I$(QTDIR)\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I.\..\SDK\boost" "-I.\..\inc"  
outputs:.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp  
Additional dependencies:$(QTDIR)\bin\moc.exe;%(FullPath) 

该参数可以使用上面的脚本自动在Visual Studio工程中加入并修复。


2. 在Visual Studio中打开Qmake生成的project以后每次Debug都会导致重新编译的问题。

使用Qt Plugin for Visual 来打开Qmake 生成的pro文件,会自动构建好正确的配置并且不会每次debug都重新编译。

参考 StackOverflow https://stackoverflow.com/questions/19057718/visual-studio-recompiles-moc-files-every-time-when-running-qmake



参考文档《C++ Gui Programming with Qt4》

你可能感兴趣的:(Qt,GUI,Qt)