Qt

  • Qt 5.12.10
  • MSVC 2017

QT 在 windows 平台不提供 64 位安装包, 但可以安装 32 位的 qt 和 64 位的编译组件用于编译出 64 位的程序.

qt 镜像站

国内 Qt 镜像网站
中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/qt/
北京理工大学:http://mirror.bit.edu.cn/qtproject/
中国互联网络信息中心:https://mirrors.cnnic.cn/qt/

安装

首先到 镜像站 下载 qt 安装包, 选择合适的版本(例如 5.12.10), 点击下载qt-opensource-windows-x86-5.12.10.exe.

安装时要注册账号, 安装组件建议勾选:

1
2
3
4
5
6
7
8
9
10
11
12
- Qt 5.12.10
- MSVC 2017 64-bit
- MinGW 7.3.0 64-bit
- Qt Charts
- Qt Data Visualization
- Qt Purchasing
- Qt Virtual Keyboard
- Qt WebEngine
- Qt Network Authorization
- Developer and Designer Tools
- Qt Creator 4.13.1 CDB Debug
- MinGW 7.3.0 64-bit

QT+VS

安装完成后到 VS2017 中点击 工具 -> 扩展和更新 . 搜索Qt Visual Studio Tools 下载安装, 重启 VS2017, 然后 VS 上方菜单栏多出一个Qt VS Tools.
点击 Qt VS Tools->Qt Versions-><add new Qt version>, 设置Path 时选择 (QT 安装路径)\5.12.10\msvc2017_64\bin\qmake.exe 文件即可.

在 VS 中新建项目时就可以选择 qt->Qt Wigdgets Application.
新建的工程下默认出现如下文件

1
2
3
4
5
6
7
8
9
- Form Files
- xxx.ui
- Header Files
- xxx.h
- Resource Files
- xxx.qrc
- Source Files
- main.cpp
- xxx.cpp

控制台 or 窗口

在使用 VS 生成 Qt 应用程序时, 如果希望运行程序时不弹出控制台窗口, 可以按如下方式设置子系统类型:

  • 属性 -> 配置属性 -> 链接器 -> 系统 -> 子系统: 控制台 (/SUBSYSTEM:CONSOLE)
    改为:
  • 属性 -> 配置属性 -> 链接器 -> 系统 -> 子系统: 窗口 (/SUBSYSTEM:WINDOWS)

如果使用 CMake 配置工程, 只需在 add_executable 中加上 WIN32 参数即可.

1
2
3
4
5
6
add_executable(${TARGET_NAME} WIN32
main.cpp
widget.cpp
widget.h
widget.ui
)

添加图标

  1. 从在线图标库 (例如 https://www.iconfont.cn/) 下载 .icon 格式图标文件;

  2. 如果无法下载 .icon 格式, 可以先下载其他格式, 然后通过在线网站 (https://cloudconvert.com/eps-to-ico) 进行格式转换, 得到 logo.ico 文件;

  3. 准备 rc 文件: 用记事本编辑以下内容保存为logo.rc 文件

    logo.rc
    1
    IDI_ICON1           ICON   DISCARDABLE  "logo.ico"
  4. CMakeLists.txt 文件中将 logo.rc 文件加入到源文件列表中

    CMakeLists.txt
    1
    2
    3
    4
    5
    6
    list(APPEND SOURCES ${SOURCES_DIR}/logo.rc)

    add_executable(${TARGET_NAME}
    ...
    ${SOURCES}
    )
  5. 将准备好的 logo.ico 文件放到与 rc 文件的同级目录

  6. 编译运行, 即可生成带图标的 *.exe 可执行文件.

踩坑

  1. 若直接编译运行可能报错,VS 无法搜索到 qt 相关头文件, 在工程属性下查看 C/C++ 的附加包含目录发现继承了$(Qt_INCLUDEPATH_), 然而实际上搜索不到. 因此可以再新建一个包含目录, 将这个宏再添加一次即可.

  2. 如果直接在 VS 中双击 Form Files/xxx.ui 文件, 本应该跳转到 Qt Designer 打开该文件, 实际上可能出现闪退. 因此需要在 VS 中右键该文件, 选择打开方式, 其中有一个默认的Qt Designer. 该值可能无效, 点击添加, 程序选择(QT 安装路径)\5.12.10\msvc2017_64\bin\designer.exe, 并设置为默认值即可.

  3. 编译运行时报错:

    1
    This application failed to start because it could not find or load the Qt platform plugin "windows" in "".

    可能是相关 dll 库文件没有加载成功, 将 Qt5Core.dll,Qt5Gui.dll,Qt5Widgets.dll 复制到生成的可执行文件所在路径 或者将 dll 所在路径添加到系统环境变量然后重启系统即可.

点击这个错误可以定位到出问题的代码, 将文件 #1348-1356# 行改为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#if defined(__cplusplus)
#if defined(__clang__)
#if QT_HAS_CPP_ATTRIBUTE(clang::fallthrough)
# define Q_FALLTHROUGH() [[clang::fallthrough]]
#endif
#elif defined(__GNUC__)
#if QT_HAS_CPP_ATTRIBUTE(gnu::fallthrough)
# define Q_FALLTHROUGH() [[gnu::fallthrough]]
#endif
#elif QT_HAS_CPP_ATTRIBUTE(fallthrough)
# define Q_FALLTHROUGH() [[fallthrough]]
#endif
#endif

发布

查找依赖的 dll 文件

VS+Qt 项目要在其他电脑上运行需要相关 dll 库文件, 其中 qt 相关库可以用 qt 自带的命令windeployqt [*].exe 补全 (注意这里需要在 Qt 自带的Qt 5.12.10(MSVC 2017 64-bit) 里运行,而不能在 cmdpowershell里运行),而其他运行库可以用 VS 自带的 dumpbin 命令检索到:dumpbin /IMPORTS [*]exe > output.txt,然后再找到相关文件复制到 exe 所在路径.

使用 Enigma 工具进行打包

Reference

作者

Luo Siyou

发布于

2023-01-03

更新于

2023-05-02

许可协议