一, 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应该会显示类似以下的界面
3. Visual Studio下调试报告Assert错误问题。
在Vs下新建一个Qt Gui Application的工程测试一下Hello Word。
#include int main(int argc, char *argv[]) |
---|
编译运行,出现assert错误。
原因是注册表中有一个字体相关的键值,在中文的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
|
---|
四,其他配置
1. Visual Studio 配置
vs中遇到最多的就是不会生成mocxxx.cpp最后导致连接出现一大堆问题
解决方法如下:对于未自动生成编译的文件右键属性,选择Custom Build 并将内容修改如下
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》