ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

QT5环境搭建全攻略:从版本选型到常见错误根治

QT5环境搭建全攻略:从版本选型到常见错误根治 1. 先想清楚你学的到底是哪一个QT5版本、界面框架和编译器套件的三岔路口很多人打开QT5的下载页面就懵了原因很简单——你在搜索引擎里敲“QT5下载”的时候脑子里想的其实是“一个叫QT的东西”但等你真正落到官网看到的是好几套东西混在一起有Qt 5.9.4、5.12、5.15这些版本号有MSVC 2017 64-bit、MinGW 7.3.0这种编译器标识还有QML、Quick、Widgets这些从来没见过的名词。不先把这三层关系捋清楚后面每一步都会踩坑而且你连自己错在哪都说不出来。先看版本。QT5是个大版本家族从5.0到5.15中间隔了十多个minor release。网上搜“QT5安装”搜出来的教程还停留在5.9.4这种2017年前后的老版本这里面有个很现实的原因很多学校的嵌入式课件、老的C项目文档都是拿5.9.4写的所以老教程满天飞。但你自己新学的话我的建议是直接上5.15.2这是QT5的最后一个LTS长期支持版本官方一直维护到2025年。相比之下5.9.4虽然也稳定但已经是晚期维护状态了很多新模块的新特性没有而且最重要的是——5.9.4时代配的Qt Creator版本老后面我们要讲的“无法拖拽文件”这种毛病在老版本上特别容易触发。版本选新不选旧这条原则在QT5这里同样适用除非你被某个老项目的代码绑死了否则没有理由用5.9.4。再说界面框架。QT5里有两条完全不同的路一个是Qt Widgets基于C控件体系的传统桌面界面方案QPushButton、QLineEdit、QTableWidget这些都是Widgets写起来和MFC的思路有一点点像控件直接往窗口上摆。另一个是Qt Quick / QML这是用声明式语法描述界面、用JavaScript写逻辑的框架更适合做触摸设备、炫酷动效和跨端界面。你搜“QT5蓝图”的时候大概率是被传统桌面开发吸引过来的那么老老实实走Widgets路线就够了QML可以等Widgets玩熟了再碰。两条路不是二选一的仇敌很多项目混着用但对新手来说先专一。我见过不少新人上来就想搞QML结果因为QML的基础——JavaScript、QObject属性系统、Context——还没建立学了半天连个按钮的点击响应都写不顺打击信心不说还白费了时间。最后是编译器套件。MSVC 2017 64-bit和MinGW之间的选择本质是你用哪套编译器来构建你的C代码。MSVC是微软的Visual C编译器在Windows上跑QT5程序性能好、兼容性好但你需要装对应版本的Visual Studio——最少装Build Tools否则光有QT5编译器套件也编不过。MinGW是Windows上的GCC移植版好处是轻量装完QT直接就能编不需要额外安装几GB的VS。我的建议很简单如果你电脑上已经装了Visual Studio或者以后打算把C基础功打好选MSVC如果你只是想快点跑起来、不想被VS的体积折磨选MinGW。但注意一点——你装的是MSVC编译出来的QT5就必须用MSVC套件构建你的工程MinGW同理混着来就会遇到下面要说的那一堆moc、qrc、头文件路径的诡异问题。2. 下载安装那一步不少人是败在组件勾选上——把Qt WebEngine这些模块一次配齐明白了上面三个概念再去看下载页就顺畅多了。老版本的QT5没有在线安装器官方打包成好几十个exe文件放在archive里一个主包加一堆子模块包下得人头皮发麻。5.15之后官方主推在线安装器下载一个qt-unified-windows-x64版本剩下的组件在安装界面里自己勾选。这里要特别提醒一件事网上所有教你“勾全选”的教程都是在害你QT5组件全选拉下来二三十GB里面一半的模块你这辈子都用不上。但反过来漏勾也很疼——热搜里那个“qt5安装webengineview”就是典型地安装时可以没用用时方恨少。Qt WebEngine是个什么东西简单说它是把Chromium浏览器内核塞进了QT5里让你能在桌面程序里渲染HTML页面、跑JavaScript、做富文本编辑器甚至直接内置一个浏览器。很多新手装完QT5之后写了个QWebEngineView结果一import就报错跑起来直接崩就是因为装QT5的时候没勾WebEngine相关模块。这个模块在在线安装器的组件树里Qt - Qt WebEngine分类下要把那个复选框整个勾上——注意不是只勾主模块Qt WebEngine的Debug库和源码也要勾不然你后面想在IDE里跟踪进库代码断点根本进不去。除了WebEngine还有两个组件绝对不要漏。一个是Sources很多人嫌占空间不勾这个我强烈建议勾上几百MB换一个随时查看QT5源码的能力排错的时候价值无可估量。另一个是与你选定的编译器版本对应的开发库比如选了MSVC 2017 64-bit那msvc2017_64目录下的Qt库文件是必选的核心这个默认就会装上但要注意别只勾个Runtime不勾Development。另外QT5还带一套Qt Creator IDE这部分默认勾选不用动。安装目录这一个看起来无所谓的细节我劝你务必上心。默认路径通常带空格比如C:\Program Files\Qt这在大多数时候没问题但如果以后你走CMake 自定义脚本构建那条路带空格的路径偶尔会惹出一些引号没加够的奇奇怪怪问题。我自己习惯装成C:\Qt\Qt5.15.2这种无空格短路径一劳永逸。路径里不要有中文这条不用多说了吧凡是编译相关的工具链中文路径都能给你编出一堆莫名其妙的错。装完还有一个环境变量的动作老手可能默认你知道了但新手经常漏。安装器在安装过程中会把Qt Creator的启动程序放进开始菜单但不会帮你设置QTDIR、PATH这些环境变量。你要手动把C:\Qt\Qt5.15.2\5.15.2\msvc2017_64\bin加进系统的PATH否则后面在命令行里手敲qmake、windeployqt这些工具会提示找不到命令。做法是右键“此电脑” - 属性 - 高级系统设置 - 环境变量在系统变量的Path里追加那一条改完最好重启一次终端窗口让它生效。3. 从新建工程到看见第一个窗口构建套件与qmake的工作方式环境装好之后第一件事不是去翻API文档而是先跑通一个最简单的窗口。打开Qt Creator界面可能有点复杂但你要找的关键入口就两个左上角的“New Project”和左侧工具条里的“Welcome”。点New Project左侧列表选“Application”中间选“Qt Widgets Application”这个是经典起步模板。点确定后会让你选项目保存位置——注意这里有个很多人忽略的问题整个项目路径同样别带中文和空格否则后面单步调试时符号表加载会坑你路径最好清清爽爽的比如D:\code\helloworld。再往后是Kit选择页面这里会列出你安装QT5时配置好的构建套件。如果你装的MSVC版这里会出现Desktop Qt 5.15.2 MSVC2017 64bit这一项如果是MinGW版则是带MinGW字样的套件。选好之后一直下一步直到完成。Qt Creator会自动帮你生成main.cpp、mainwindow.cpp、mainwindow.h外加一个.pro工程文件和一个mainwindow.ui界面描述文件。直接点左下角的绿色三角“运行”按钮如果一切顺利几秒钟后屏幕上出现一个空荡荡的窗口——恭喜你的第一个QT5程序活了。这个“活了”的背后其实藏着QT5一个和其他C框架很不一样的工作流程值得稍微展开讲一下因为它搞懂了你后面调试各种诡异报错就有的放矢了。QT5的项目构建不是简单的“编译器读cpp - 产出exe”这么一步。Qt处理的是C的超集概念你在代码里写的Q_OBJECT宏、signals关键字、slots关键字、tr()翻译函数这些都不是标准C语法C编译器本身根本不认识。所以Qt会先用自己的工具mocMeta-Object Compiler元对象编译器扫描头文件遇到含有Q_OBJECT宏的头文件自动生成一个额外的moc_xxx.cpp文件遇到资源文件.qrcrcc工具会把资源编译进代码遇到.ui界面文件uic工具会把它转成ui_xxx.h。这些生成的中间文件再加上你的源码才会一起交给真正的编译器去编译链接。这套机制的结果是QT5工程不能只盯着自己写的cpp文件构建目录里躺着的一大堆moc_开头、qrc_开头的文件才是Qt真正干活的证据。在新版的Qt Creator里这些都是自动完成的你不需要关心。但有个常见的翻车点值得知道如果你把一个含Q_OBJECT宏的头文件加入工程却没有在.pro文件里声明HEADERS那么moc不会生成对应的moc文件编译时你会看到一堆奇怪的“undefined reference to vtable”错误——这种报错经验丰富的人一眼就知道是“漏了Q_OBJECT处理”但你第一次遇见时绝对一头雾水。跑通之后千万别急着关趁热做两个小实验这两个实验能让你对QT5的事件循环和对象模型有直觉。第一个实验在mainwindow.cpp的构造函数里加一行ui-setupUi(this);后面跟一句setWindowTitle(QStringLiteral(蓝图系列第一站));重新运行看看窗口标题有没有变成那行字。第二个实验在MainWindow的构造函数里new一个QLabel塞进centralwidget文本设为“Hello Qt 5”再运行。亲眼看到代码变成窗口里的一个控件之后你对“代码构建界面”这件事就开始有体感了后面怎么写UI都不会怕。4. .pro文件、构建目录和那个神秘的qt5config.cmake路径跑通第一个工程后把项目文件面板展开你会看到一个以项目名命名的.pro文件它的内容大概是几行整齐的配置QT core gui、greaterThan(QT_MAJOR_VERSION, 4): QT widgets、TARGET helloworld、TEMPLATE app后面跟着SOURCES、HEADERS、FORMS三个变量列着你的文件。很多人忽略这个文件认为IDE管理一切但这个文件是qmake理解你这个项目的唯一入口很多疑难杂症的根子都在这里。QT 那一块是你向qmake声明“我要用Qt的哪些模块”这行配置直接和你的链接库对应。你写了个QWebEngineView如果不加QT webenginewidgets编译时就会报“找不到webenginewidgets模块”之类的错这时正确的做法不是去IDE设置里乱翻而是回到.pro文件补上这一行。这就是为什么网上所有QT5问题讨论帖几乎都会先回一句“你的.pro里加了xx模块没有”——这是排序第一的排查点。再往下你可能会在项目目录旁边注意到一个带着build-前缀的同名目录那是Qt Creator的构建目录。qmake默认采用“影子构建”机制就是源码目录和构建目录分离——源文件在D:\code\helloworld中间产物和最终exe则躺在D:\code\build-helloworld-Desktop_Qt_5_15_2_MSVC2017_64bit-Debug目录里。初次接触时可能觉得多此一举搞这么长的怪目录名。实际上这是个非常聪明的设计好处是显而易见的你不小心把构建目录整个删了源码毫发无损再构建一次又从零来一个源头能同时保留Debug和Release两套构建产物互不干扰。我自己就经历过只配置Debug不配置Release到发版本时一跑Release全是debug版本的残留行为尴尬得很。但影子构建也有它坑人的一面尤其是那些试图在构建目录里找文件、或者脚本硬编码了相对路径的项目一挪窝就炸。所以你会发现很多老项目干脆放弃影子构建在.pro里写一行DESTDIR $$PWD/bin把exe统一输出到源码目录下的bin文件夹里——两种风格都有自己的道理看项目习惯。接下来要说的这个路径问题直接回应一下热搜词里出现频率很高的“cmake error at c:/qt/qt5.9.4/5.9.4/msvc2017_64/lib/cmake/qt5/qt5config.cmake”。这个报错本身很好读懂某个CMake工程在配置阶段试图去加载qt5config.cmake这个文件——Qt5的CMake配置入口——但CMake说找不到。这句话里的路径特别有迷惑性因为它的拼写是C:\qt\qt5.9.4\5.9.4\msvc2017_64\lib\cmake\qt5看起来好像是Qt安装程序自己写死的路径缺文件于是你顺着找过去发现文件确实不在那。但是别急着重装真正的问题是这个C:\qt并不是你装有Qt的目录而是某个机器上曾经存在过的目录而这份CMake配置是从别人的工程里拷出来的。换句话说报错里的路径只是“上次在某台机器上Qt被安装的位置”和你现在的Qt安装在哪毫无关系。正确的解决办法完全不需要碰这个旧路径如果是CMake工程设置变量CMAKE_PREFIX_PATH指向你Qt真正的安装前缀假设你的Qt装在了D:\Qt\5.15.2\msvc2017_64那么打开CMake配置时在CMakeLists里或cmake命令行里指定-DCMAKE_PREFIX_PATHD:\Qt\5.15.2\msvc2017_64重新configure系统会到$prefix/lib/cmake/Qt5Qt5Config.cmake或者更准确地说是到$prefix/lib/cmake/qt5目录下找qt5config.cmake自然就配上了。如果用的是qmake系那就没有这个困扰因为qmake的路径配置在安装时由安装器写入了Qt Creator的构建套件里IDE会老老实实找到对应版本的qmake——这也是为什么我强烈建议初学阶段用qmake而不是CMake的原因少踩一大串配置坑。5. 老版本Qt Creator的两个历史遗留问题拖拽失效与路径报错的现实解法热搜里有两组词初看会莫名其妙一个是“qt5无法拖拽文件”另一个就是这几版creator常见的构建/运行路径报错。这些问题的共同点让人有些无奈——它们都不是QT5框架本身的bug而是Qt Creator这个IDE在特定版本、特定系统环境下的老毛病。先说“无法拖拽文件”。我说的是在文件资源管理器里选中一个源码文件拖动到Qt Creator的编辑器窗口里松开鼠标期望它打开文件。在有些版本上你会发现鼠标拖过去、指针变成禁止符号怎么都放不进去。解决办法要分软件层面和系统层面。软件层面先确认你是哪个版本5.9.4自带的Qt Creator版本相当老这种拖拽失效几乎成了老版本的标志性问题升级到5.15.2对应的Creator版本后基本就自愈了。系统层面如果你确认Creator版本够新仍然拖不动那就去检查Qt Creator运行时的权限——如果它是用管理员身份启动的而你的资源管理器是普通权限在Windows的session 0隔离和UIPI机制下跨权限拖拽数据交换就会被拒绝。这是Windows自己的机制在起作用和Qt Creator一点关系没有。遇到这种情况把Qt Creator从“以管理员身份运行”改为普通权限启动就能解决。如果实在解决不了再分享一个完全不依赖拖拽的操作路径——在资源管理器中选中文件右键选“Open With”在程序列表里选Qt Creator或者干脆用最基础的办法打开Qt Creator按下CtrlO在弹出的文件对话框里手动导航到目标文件。虽然效率低了点但稳定可靠。我见过有人因为一个拖拽问题在论坛里翻了十几页旧帖最后发现是杀毒软件把拖拽卸载的hook给劫持了所以别被一个小交互卡太久。另一处老版本的历史遗留问题是工程运行时的“构建套件路径错乱”——具体表现是构建成功exe也生成了但点击运行时提示找不到某个Qt5Core.dll或者提示找不到qwindows.dll。初学者看到dll缺失就四处找dll、复制dll这完全是治标不治本。根因在于系统PATH里没有Qt的bin目录或者Qt Creator运行时选择的套件环境没有被正确匹配到。打开“工具”菜单进“Kits”检查当前使用的套件里Qt version那一栏是否真的指向了你安装的实打实的Qt目录而不是某个残留的无效路径。bin目录加进系统PATH后重启Qt Creator再运行dll缺失的问题基本不会再出现。6. 接下来怎么走第一阶段QT5学习路线与排错自查表文章最后这段写给看完上面内容、刚刚跑通第一个窗口的你。我先把话放前面明白了框架和工具怎么用和真正能在QT5里开发出有用的程序之间还有相当长的一段距离但这段路是有明确路标可走的不需要什么高深的天赋耐心按节奏推进就行。我的建议是第一阶段集中火力搞定四件事这四件事是按依赖顺序排好的不建议跳。第一件是控件基础QPushButton、QLabel、QLineEdit、QTextEdit、QListWidget这几个高频控件挨个放上去看看行为和属性面板不需要背API大概长什么样、触发什么信号心里有数就行。第二件是布局管理QVBoxLayout、QHBoxLayout、QGridLayout三个布局搞定能做到窗口拉伸时控件跟着合理伸缩这时候你对父控件、控件树结构会有一个真实的体感。第三件是信号槽机制这是QT5的灵魂connect函数的五种写法Lambda表达式怎么捕获变量传参数按钮点击怎么更新label文字这一步你值得慢因为在QT里所有UI交互的响应都在信号槽上转。第四件是样式表QSSQT5的界面美化基本靠它做一个像样的登录页面给自己一点正反馈。排错能力也是第一阶段的必修课我把这段高频问题整理成一张表你出问题时直接对着找能省下大量翻论坛的时间常见报错/现象最可能的原因首选检查动作编译报 vtable/undefined reference头文件含Q_OBJECT但没写进HEADERS检查.pro文件的HEADERS列表QWebEngineView使用时崩溃或找不到模块安装时没勾Qt WebEngine重跑安装器补装WebEngine模块运行时提示缺少Qt5Core.dll等bin目录未进PATH或套件路径无效检查系统PATH和“工具 - Kits”里的Qt版本路径CMake找不到qt5config.cmakeCMAKE_PREFIX_PATH未指向Qt安装前缀配置-DCMAKE_PREFIX_PATH指向你的Qt目录点击运行时窗口一闪而过可能是构建成功了但启动崩溃在Qt Creator里切到“应用程序输出”面板看崩溃信息中文路径导致moc或编译器无法处理项目路径或源码路径含中文迁到纯英文路径后重新构建整个QT5的学习曲线最有意思的地方在于前期最陡的不是C语法而是那套对象模型和构建流程带来的“黑盒感”。当你亲手处理完上面表格里任意三四个问题之后QT5在你眼里就不再是黑盒了。第一个真正属于自己的小项目比你自己想的要近。我个人的体会是QT5学习的节奏不在于每天背多少API而是保持一个“每天都在产出可见程序”的频率。哪怕今天只学会了把按钮文字的字体变大也是一个能拿得出手的成果。就凭现在这些积累你已经能构建起一个能跑、能调试、能排查基本问题的QT5环境了。下一篇“蓝图二”我会带你继续往前推一步把信号槽的细节和常用控件的搭配组合讲透到时候我们工程里见。
返回列表