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

news2024/11/25 14:48:59

用过 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_SOURCES
        main.cpp
        mainwindow.cpp mainwindow.h
        mainwindow.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_var
				CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
				CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
				CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
				CMAKE_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_SOURCES
        main.cpp
        mainwindow.cpp mainwindow.h
        mainwindow.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"
  pause
  goto 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.coloradmin.cn/o/2202261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac本地VSCode配置LeetCode

1、安装node.js及环境配置 https://www.jb51.net/article/283302.htm mac配置后如何找到Node地址 打开终端&#xff0c;输入which node 2、安装leetcode插件 https://zhuanlan.zhihu.com/p/488602193 3、mac配置力扣插件 https://juejin.cn/post/7050349897756704805 4、登…

前瞻性的索引设计

目录 介绍两个快速、易用的技术&#xff1a;基本问题法&#xff08;BQ&#xff09;和快速上限估算法&#xff08;QUBE&#xff09; 发现不合适的索引 基本问题法 对每个SELECT语句&#xff0c;以下问题的答案都必须按下述步骤来考虑 如何确定一个方案能否让SELECT在最差输…

PostgreSQL 专栏已全部完成

PostgreSQL 专栏历时近半年&#xff0c;终于完成了。 目前已整理成册&#xff0c;可以看下截图&#xff1a; 目录预览 目录 01 预览&#xff1a; 目录 02 预览&#xff1a; 目录 03 预览&#xff1a; 目录 04 预览&#xff1a; 目录 05 预览&#xff1a; 目录 06 预览&…

罗格科技:全球税务服务领域初露锋芒 罗格罗拉国际税大模型发布

近年来&#xff0c;随着全球数字经济和跨境电商的迅猛发展&#xff0c;税务问题已成为中国企业出海过程中不可忽视的重要环节。为了帮助企业应对国际税务挑战&#xff0c;国内领先的数据科学与税务科技服务供应商罗格科技&#xff0c;携其最新成果——罗格罗拉国际税大模型&…

[内容转载] 微信全平台开源终端数据库WCDB迎来重大升级!

第一次看到这么详实的文章&#xff0c;转给大家看看&#xff0c;很多提出问题和如何解决问题的方法因为太细了&#xff0c;就没有完全转载&#xff0c;感兴趣的可以去看原文。 一、简介 WCDB 是微信团队开源的一款基于 SQLite 的终端数据库。自 2017 年 6 月开源以来&#xff…

【C++】STL——stack和queue

目录 前言容器配接器&#xff08;适配器&#xff09;stack的使用stack的模拟实现queue的使用queue的模拟实现双端队列&#xff08;deque&#xff09; 前言 前面我们已经学习了STL容器中的string、vector还有list。 【C】string的模拟实现 【C】STL——vector的模拟实现 【C】S…

gradle降级

文章目录 引子编译错误参考 引子 项目引入了一个高版本项目改造&#xff0c;编译运行失败&#xff0c;提示如下错误&#xff0c;解决方案要么升级gradle版本&#xff0c;升级适配改各种方法配置&#xff0c;现有的项目存在适配问题&#xff1b;要么就是版本降级。 本文以介绍…

docker环境redis启动失败

现象&#xff1a; 查看日志错误为 Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 经查询为aof文件损坏导致&#xff0c;修复aof即可 解决方法&#xff1a; 1.查看执行的docker命令&…

c到c++衔接速成

温馨提示&#xff1a;本篇文章乃博主多次学习后的总结&#xff0c;其中一些专业名词的概念不会做介绍&#xff0c;本篇文章只解决实操问题 c到c中&#xff0c;语法上得到了许多升级&#xff0c;那么哪些地方升级了&#xff0c;我们来快速复习一下 目录 头文件的升级 命名空间…

国产长芯微LDC5791是一款单通道、20位、无缓冲电压输出DAC完全P2P替代AD5791

描述 LDC5791是一款单通道、20位、无缓冲电压输出DAC&#xff0c;采用最高33 V的双极性电源供电。正基准电压输入范围为5 V至VDD – 2.5V&#xff0c;负基准电压输入范围为VSS 2.5 V至0 V。相对精度最大值为1 LSB&#xff0c;保证工作单调性&#xff0c;差分非线性(DNL)最大值…

基于echarts的旅游信息(游客行为分析)大数据可视化平台(echarts+Django+MySQL+Scrapy框架爬虫;程序+论文+开题报告)

摘要 本论文旨在研究Python技术和ECharts可视化技术在游客行为分析系统中的应用&#xff0c;通过对旅游数据的深入分析&#xff0c;希望能够揭示出南京旅游市场的现状和趋势&#xff0c;从而为游客提供更优质的旅游体验&#xff0c;也可以为政府和旅游企业制定更加科学和有效的…

Spring事务的1道面试题

每次聊起Spring事务&#xff0c;好像很熟悉&#xff0c;又好像很陌生。本篇通过一道面试题和一些实践&#xff0c;来拆解几个Spring事务的常见坑点。 原理 Spring事务的原理是&#xff1a;通过AOP切面的方式实现的&#xff0c;也就是通过代理模式去实现事务增强。 具体过程是…

2024年诺贝尔物理学奖

2024年&#xff0c;诺贝尔物理学奖没有颁给物理学家&#xff0c;而是授予了两位计算机科学家&#xff0c;表彰他们在神经网络领域的开创性工作&#xff0c;这项研究成为了我们今天所称的人工智能的基础。这标志着物理学与计算机科学之间的深度融合。 获奖者约翰霍普菲尔德和杰弗…

财政警钟敲响!CBO预测:美国2024财年赤字预计达1.8万亿美元

KlipC报道&#xff1a;美国国会预算办公室&#xff08;CBO&#xff09;近日发布报告显示&#xff0c;2024财年&#xff08;2023年10月1日至2024年9月30日&#xff09;&#xff0c;美国联邦政府预算赤字高达1.8万亿美元&#xff0c;与上一财年相比增加了1390亿美元。据CBO预测&a…

转型AI产品经理需要掌握的硬知识、经理能力模型和常见AI概念梳理

近几年&#xff0c;从亚马逊&#xff0c; Facebook&#xff0c;到谷歌&#xff0c;微软&#xff0c;再到国内的BAT&#xff0c;全球最具影响力的技术公司都将目光转向了人工智能&#xff08; AI &#xff09;。2016年 AlphaGo 战胜李世石&#xff0c;把公众的目光也聚集到了人工…

IROS24新鲜出炉:PRL-Track,最先进的无人机视觉目标跟踪系统!

导读&#xff1a; 近年来&#xff0c;随着无人机技术的飞速发展&#xff0c;视觉目标跟踪在无人机的自主应用中扮演着越来越重要的角色&#xff0c;然而&#xff0c;在复杂多变的环境中&#xff0c;实现高精度的目标跟踪并非易事。无人机在飞行过程中&#xff0c;常常会遇到目标…

介绍几个电池充电管理芯片(TP4056、SGM40561)

TP4056 上一篇我们介绍了个TP4055&#xff0c;那么跟TP4055相比&#xff0c;TP4056肯定是做了升级的。 首先是有最高1000mA的充电电流&#xff0c;而TP4055是500mA。 一般来说我们尽可能的让充电电流接近电池容量的一半&#xff0c;这样对电池比较好。 充电电压都是4.2V。 …

winform实现托盘语音提醒

测试环境: visual studio 2022 window 10 .net framework 4.6 本文实现的功能有&#xff1a; 1 托盘最小化 2 语音定时播放 3 检测到操作系统被客户点静音后&#xff0c;需要程序控制开启音量(在运行过程中&#xff0c;由于语音重复播放&#xff0c;客户很烦&#…

【Protobuf】基本使用总结+项目实践

概述 序列化与反序列化 网络传输中使用&#xff0c;可以实现将对象转换为二进制序列&#xff0c;然后将二进制序列转换为对象&#xff0c;这一个交互的过程就是序列化。生成的数据&#xff0c;持久化存储到磁盘上的过程&#xff0c;也需要经过序列化和反序列化才可以实现。 序…

SpringBoot实现的美发门店客户关系管理(CRM)系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…