Windows 下纯手工打造 QT 开发环境

embedded/2024/10/10 20:23:01/

用过 QtCreator 和 VS QT 插件,都觉得不是很理想。所以有了这个想法。
手工打造的 QT 的开发环境,是不需要安装上面两个程序的。

1、下载 vcpkg,编译 QT6
      下载地址:https://github.com/microsoft/vcpkg.git
       进入到 vcpkg 目录,在命令行上输入:
       vcpkg install qt:x86-windows-static
       或
       vcpkg install qt:x64-windows-static
       这样,QT6 的头文件、库文件(MT 类型的静态库)都有了,理论上就可以在 VS2022 中进行 QT 程序的开发了。
       因为还不能进行 UI 界面设计,所以说只是理论上。
       如果你只开发命令行程序,肯定是没有问题的了。

2、下载 QtCreator 程序
      因为 QT 是使用 QtCreator 来创建、编辑界面 (.ui 文件),所以我们还要下载 QtCreator 程序;
      不要到 QT 官网去下载,因为 QT 官网的 QtCreator 程序,是一个集成开发环境。是需要授权的。
      我们可以到 github 上,下载 QtCreator 程序。它只有新建、编辑界面功能。我们只需要这个功能。
      下载地址:https://github.com/qt-creator/qt-creator/releases/download/v14.0.2/qtcreator-windows-x64-msvc-14.0.2.7z
      下载下来,解压,保存到磁盘上。
      在磁盘任意位置,创建一个文本文件,输入内容:

        <?xml version="1.0" encoding="UTF-8"?><ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"/></widget></ui>

      保存。将这个文本文件后缀名修改为 .ui 。
      双击这个 .ui 文件,windows 会弹出打开方式对话框,选择你下载、保存的 qtcreator.exe 程序,并选中始终用这个程序打开。
      这样我们就可以使用 qtcreator 程序对 ui 文件(界面)进行界面设计了。
      至此,Windows 下,QT 开发环境搭建成功,可以进行程序开发了。
      无需复杂的 QtCreator 的安装过程。也无需在 VS2022 中安装 VS QT 插件。

下面2个步骤不是必须的,可按照你自己的习惯来。但你如果采用下面的方法,会给你带来很多方便。

3、编写 CMakeLists.txt 脚本
      采用 cmake 的方式,而不是 pro 的方式,当然是这种方式跨平台。而且 cmake 现在几乎算是标准了。 
      (qt 还提供一个 pro 到 cmake 的小工具:qmake2cmake。Introducing qmake2cmake)
      这是一个标准的 QT 程序 CMakeLists.txt 脚本:     

cmake_minimum_required(VERSION 3.5)#工程文件名称
set(ProjectName "test01")
project(${ProjectName} VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)#文件源码列表
set(PROJECT_SOURCESmain.cppmainwindow.cpp mainwindow.hmainwindow.ui
)qt_add_executable(${ProjectName} WIN32 MACOSX_BUNDLE MANUAL_FINALIZATION ${PROJECT_SOURCES})
target_link_libraries(${ProjectName} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
install(TARGETS ${ProjectName} BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

除了 #工程文件名称、#文件源码列表,不一样外,其它程序都可以套用这个模板。
因为我们用 VCPKG 编译的 QT6 是 MT 类型的静态库,所以上面的脚本需要修改,以符合 VCPKG 编译出来的 QT6 MT静态库;
完整的脚本如下(添加了 MT 编译,和修改了编译使用到的库文件):

cmake_minimum_required(VERSION 3.5)#工程文件名称
set(ProjectName "test01")   
project(${ProjectName} VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)#MT 编译
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
foreach(flag_varCMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASECMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFOCMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASECMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)if(${flag_var} MATCHES "/MD")string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")endif()if(${flag_var} MATCHES "/MDd")string(REGEX REPLACE "/MDd" "/MT" ${flag_var} "${${flag_var}}")endif()
endforeach(flag_var)find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)#文件源码列表
set(PROJECT_SOURCESmain.cppmainwindow.cpp mainwindow.hmainwindow.ui
)qt_add_executable(${ProjectName} WIN32 MACOSX_BUNDLE MANUAL_FINALIZATION ${PROJECT_SOURCES})
#vcpkg 的 bug,不能自动找到 bz2 brotlicommon brotlidec 库,手动添加上
target_link_libraries(${ProjectName} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets bz2 brotlicommon brotlidec)
install(TARGETS ${ProjectName} BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

这样,这个编译脚本就完成了。可以正常工作了。
而且它可以算是一个通用 cmake 编译脚本。
你只需修改工程文件名称,和源码列表,就可以用到其它 QT 程序中去,省了你编写 cmake 脚本的麻烦。
        
4、编写 cmd 批处理编译脚本
      在磁盘任意位置,建立 zqt.cmd 批处理文件。内容如下:

@echo off
color A:: 你的 QT 程序源代码目录
set "SourceFilePath=%1"
CD /D %SourceFilePath%:: 检查 VS2022 安装位置
for %%G in (Community,Professional,Enterprise) do (if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\%%G" (set "VSInstallPath=%ProgramFiles(x86)%\Microsoft Visual Studio\2022\%%G")if exist "%ProgramFiles%\Microsoft Visual Studio\2022\%%G" (set "VSInstallPath=%ProgramFiles%\Microsoft Visual Studio\2022\%%G")
)
if "%VSInstallPath%"=="" (echo "Visual Studio 2022 not found"pausegoto bEnd
)
call "%VSInstallPath%\VC\Auxiliary\Build\vcvars64.bat":: 你的 VCPKG 安装位置
set "VCPKGPTH=D:/vcpkg":: VC 的头文件、库文件搜索位置
set "VSQT6SDK=%VCPKGPTH%/installed/x64-windows-static"
set "VSSDKINC=%VSQT6SDK%/include"
set "VSSDKLIB=%VSQT6SDK%/lib"
set "INCLUDE=%VSSDKINC%;%INCLUDE%"
set "LIB=%VSSDKLIB%;%VCToolsInstallDir%atlmfc/lib/X64;%LIB%"
set "UseEnv=True"
set "InstallSDK=../_install"
set "BuildType= -DCMAKE_CONFIGURATION_TYPES=Release -DCMAKE_BUILD_TYPE=Release"
set "Path=%VSQT6SDK%/share;%Path%":: 删除临时编译目录,在当前源码目录下
if exist "./x64" (rd /S /Q  "./x64"
):: 用 VS2022 编译源码,会生成 sln 工程文件
cmake . -B "./x64" %BuildType% -DQT_DIR="%VSQT6SDK%/share/Qt6" -DQt6_DIR="%VSQT6SDK%/share/Qt6" -DCMAKE_INSTALL_PREFIX=%InstallSDK%
cmake "./x64"
cmake --build "./x64" --parallel --config Release --target install:: 检查编译是否有错误
if %errorlevel% NEQ 0 (echo ★★★★★ compile error. ★★★★★ pause
)cls:bEnd

这个批处理文件是个通用的文件。你只用修改一下你的 vcpkg 的安装位置就可以了。
在命令行上输入:zqt “你的 qt 程序目录”,就可以自动编译了。
也可以将你的 qt 程序源代码目录,鼠标拖放到这个 zqt.cmd 文件上,自动完成编译。
当然你也可以打开 sln 工程文件,编译,修改代码。

总结,这种方法的好处:
  1、模板化:cmakelists.txt 编译脚本具有通用性;zqt.cmd 批处理文件一次写成,以后也无需修改。自动完成 qt 程序编译;
  2、工程化:会生成 vs2022 的工程文件,sln 文件。你可以像对待 vc 程序一样对待 qt 程序了;
  3、静态化:编译的程序是静态链接,没有烦人的动态链接库dll。程序性能有所提高;
  4、简单化:比起 QtCreator 和 VS QT,编译过程简单的多了,节省了很多时间。也省了安装配置 QtCreator 和 VS QT 的烦恼;

小瑕疵的完善:
  由于vcpkg 编译问题,使得在编译 QT 程序时,会提示找不到 harfbuzz package。
  如果你像我一样,有强迫症,不想看见那些警告信息,那就修改 share\harfbuzz\harfbuzz-config.cmake 文件。
  https://download.csdn.net/download/dbyoung/89870466?spm=1001.2014.3001.5503
  这是我修改好的 harfbuzz-config.cmake 文件,下载,替换一下。就没有烦人的警告了。编译检查一次过,节省了编译时间。


http://www.ppmy.cn/embedded/125518.html

相关文章

Qt 5开发步骤及实例

目录 界面设计编写相应的计算圆面积代码 界面设计 创建桌面应用程序 得到这样一个树形视图 双击界面文件中的dialog.ui 直接双击控件label改名&#xff0c;然后修改最后一个label的属性 修改这个标签的样式&#xff0c;把frameshape改成Panel&#xff0c;frameshadow改…

Visdom可视化——教程

This is a simple tutorial to start using Visdom to plot graphs when using PyTorch. 这是教程链接。

广州自闭症寄宿学校有哪些?选择最适合孩子的学校

在广州这座繁华而充满人文关怀的城市里&#xff0c;有一群特殊的孩子&#xff0c;他们被称为“星星的孩子”——自闭症儿童。他们生活在自己的世界里&#xff0c;对外界的刺激反应迟钝或过度敏感&#xff0c;社交互动困难&#xff0c;语言表达受限。然而&#xff0c;在广州&…

全闪 SDS 一体机提供 FC 能力承载医院核心业务

摘要&#xff1a;邹平市人民医院使用 X3000 SDS 一体机组建分布式存储集群&#xff0c;通过 FC 接口 与 VMware 集群连接&#xff0c;以全闪池承载核心业务&#xff0c;对象存储承载 PACS 数据&#xff0c;实现存储架构的升级改造。 “新医改”的不断推进&#xff0c;对医院的…

计算机视觉的应用36-人工智能时代计算机视觉技术在电力系统中的应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用36-人工智能时代计算机视觉技术在电力系统中的应用。本文综述了人工智能时代计算机视觉技术在电力系统中的应用。文章首先介绍了项目背景&#xff0c;随后详细阐述了计算机视觉技术的模型、技术原理…

【I/O多路复用】阻塞非阻塞I/O

IO复用的本质是不在任何地方阻塞&#xff01; 总结&#xff1a;非阻塞情况下&#xff0c;要配合循环使用。 阻塞&非阻塞IO 阻塞:在进/线程中&#xff0c;发起一个调用时&#xff0c;在调用返回之前&#xff0c;进/线程会被阻塞等待&#xff0c;等待中的进/线让出CPU的使用…

网络中串接模式的使用

除了防火墙&#xff0c;以下设备也可以使用串接模式&#xff1a; 一、入侵检测系统&#xff08;IDS&#xff09;和入侵防御系统&#xff08;IPS&#xff09; 1. 工作原理 - IDS通过监测网络流量&#xff0c;识别潜在的恶意活动&#xff0c;如攻击、入侵和异常行为。它通常以被…

我们是如何将Docker构建时间缩短40%的

by: WL Mapmost从设计之初&#xff0c;便选择了云原生道路&#xff0c;在软件开发过程中自然也少不了容器化技术的使用。当然&#xff0c;我们也为Mapmost产品中使用的所有组件构建了 docker 镜像。然而&#xff0c;随着时间的推移&#xff0c;其中一些镜像变得越来越大&#…