0


【Qt】使用visual studio 2022 配置独立的Qt 5.15 开发环境

目录

为什么要写这篇文章

我大二大三写作业的时候,要用Qt做UI,整个包体装下来有五六个G,这对于512GB的手提电脑来说有点臃肿;别人看我的项目、或者我回头看旧项目时,编译运行也要依赖Qt;Qt的debug功能做得不如VS好,程序运行突然崩溃我都不知道崩在哪行。总之就是,使用Qt Creator开发真麻烦。

直到我去实习,发现Qt项目可以直接用visual studio开发,用cmake移植,更高效、轻便、通用。于是想把这个方法分享给要交作业的在校大学生,或者需要简单搭个qt环境写demo的朋友们。

本文适合:

有Qt基础开发经验的入门者,想要一个更优雅的开发环境。

本文不适合:

Qt初学者,语法和常用控件都不太熟悉的那种,或者是最近需要找开源代码参考学习的同学,就不要跟我做这么骚的操作了。还是老老实实下载Qt Creator吧。

环境配置

1. 安装VS2022

安装visual studio 2022,勾选“使用c++的桌面开发”。

2. 下载Qt 5.15

3. 部署

3.1. 安装VS拓展工具

方法一:

去官网下载拓展管理器vsaddin,双击安装。安装的时候要关闭vs2022。

https://download.qt.io/official_releases/vsaddin/2.9.1/

方法二:

打开vs2022,点击右下方”继续但无需代码→"

看顶部菜单栏,选择“拓展”,“管理拓展”
在这里插入图片描述
搜索”Qt Visual Studio Tools“,安装。(我不知道为什么,我那儿搜不到这个拓展工具)

3.2. 配置qt版本

插件不会自动识别已有的qt版本,需要我们手动设置。打开vs2022,点击”Select Qt version“;或者拓展 > Qt VS Tools > Qt Versions
在这里插入图片描述
在这里插入图片描述
添加msvc的bin文件夹路径,例如我的是

D:\Softwares\Qt\5.15.2\msvc2019_64\bin

,你会发现里面有个

qmake.exe

文件,选它就没错了。

在这里插入图片描述

3.3. 测试运行

关闭vs,再次打开,新建项目,你会发现模板列表里多了Qt。

在这里插入图片描述
选择widget application,创建,一路next next next 啥也不要改 然后 finish。运行。能跑起来就说明成功了。这一步的目的只是跑个测试,后续正式开工会另外建项目。

在这里插入图片描述

白手起家 建项目

1. 不要.ui文件

不要用qt widget application模板,因为它自带.ui文件,我不想依赖其它工具;据说改了.ui文件之后要重新生成,麻烦。

选择qt console application模板,next,finish。白手起家一点点搭。

初始的模板只有一个main.cpp,非常简短。运行之后是一个控制台黑窗。

在这里插入图片描述

2. 管理文件结构

默认生成的文件目录是这样的:
在这里插入图片描述
默认生成的解决方案是这样的:
在这里插入图片描述
模板的文件管理比较简单,仅仅是让.h和.cpp文件分开两个文件夹而已。但在实际应用中,我们需要创建多个文件夹。qt常用架构为mvc模式。此处留一个文件管理参考:

Project/
    .git/
    src/
        model/
            TreeModel.cpp
            TreeModel.h
        view/
            style/
                .qss
            icon/
                .png
            part1/
            part2/
            part3/
                TreeView.cpp
                TreeView.h
            MainWindow.cpp
            MainWindow.h
        main.cpp
        Project.qrc
    Project.sln

3. 管理模块

可以看到

main.cpp

的头文件有点奇怪。如果你有在qt creator里建过项目,会发现qt creator给的模板的main文件的头文件是

#include <QCoreApplication>

,而vs给出的模板是

#include <QtCore/QCoreApplication>

。后者多了一个文件夹路径。

没关系,咱直接把这个路径删了就行。😃 照样能运行

先把将来大概率需要用到的模块加上:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 跑起来一个窗口

新建

mymainwindow.h

Qt命名规范参考官方文档:https://wiki.qt.io/Qt_Coding_Style/zh

#include <QMainWindow>

class MyMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MyMainWindow(QWidget* parent = nullptr);
    ~MyMainWindow();
};

新建

mymainwindow.cpp
#include "mymainwindow.h"

MyMainWindow::MyMainWindow(QWidget* parent)
    : QMainWindow(parent)
{
    // TODO
}

MyMainWindow::~MyMainWindow() {}

更改

main.cpp
#include <QApplication> 
#include "mymainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyMainWindow mainWindow;
    mainWindow.show();

    return a.exec();
}
  • 我把QCoreApplication改成了QApplication。如果不改的话,运行会报错:QWidget: Cannot create a QWidget without QApplication
  • 如果你运行的时候只有console黑窗,没有window窗口,尝试点击黑窗并按一下回车键

运行,于是你会多得到一个迷你窗口。它实在是太小啦,更多设置就交给你来写代码了 😃
在这里插入图片描述

5. .qrc添加其它资源

新建.qrc文件

在这里插入图片描述
在这里插入图片描述
建好之后

Resource.qrc

文件默认不在src\文件夹下,我们需要手动移一下。

新建src\icon\文件夹,随便截个图,放张图片进去。我截了csdn的log。

修改.qrc文件如下:

<RCC>
    <qresource prefix="/">
        <file>icon/csdn.png</file>
    </qresource>
</RCC>

于是这张图片的引用路径为:

:/icon/csdn.png

prefix前缀用于给资源分类,作用类似于C++的命名空间机制。除非资源数量较多且复杂,一般用不到prefix吧。
假设.qrc中prefix设为

/myPrefix

,文件路径为

myDir/icon.png

那么,图片引用路径是:

:/myPrefix/myDir/icon.png

在mymainwindow.cpp的TODO位置添加以下代码:

// 记得添加头文件 #include <QLabel>
QLabel* label = new QLabel(parent);
QImage image(":/icon/csdn.png");
label->setPixmap(QPixmap::fromImage(image));
this->setCentralWidget(label);

运行!你将会看到:
在这里插入图片描述

6. 我不想要黑窗

console窗口的存在有助于我们用输出日志的方式debug,但看起来确实有点碍眼,对于不是程序员的用户来说。

如果你喜欢,可以把这个控制台窗口去掉,方法参考:VS+QT 显示console+不显示

cmake移植

问:如果你把写好的工程放到github上,将来想回头看时,或者别人想clone下来参考时,VS版本、环境库、系统与你不一样,怎么办?

答:用cmake实现跨平台构建

首先,你需要把Qt的路径配置到环境变量中。由cmake生成的.sln文件与Qt直接给好的模板还是稍有不同的,如果没设置这个环境变量,到时候运行起来会报错找不到Qt5Widgets.dll。

在这里插入图片描述
改完之后记得重启电脑,新的环境变量才会生效。

然后,在项目根目录下新建文件

CMakeLists.txt

。复制以下内容。文本量有点大,着重留意第12行的命令和第11行的注释即可。

# 设置cmake版本号
cmake_minimum_required(VERSION 3.8)

# 设置工程名称
project(helloworld)

# 设置C++标准为17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# !!!你需要将QT_PREFIX_PATH后的路径改为你本地对应的Qt安装目录!!!
set(QT_PREFIX_PATH "D:/Softwares/Qt/5.15.2/msvc2019_64")
set(CMAKE_PREFIX_PATH ${QT_PREFIX_PATH})

# 包含Qt头文件
include_directories(${QT_PREFIX_PATH}/include)

# 开启元对象编译器的自动编译,解析信号与槽机制,生成Qt的moc文件
set(CMAKE_AUTOMOC ON)
# 开启qrc资源文件的自动编译,解析Qt的.qrc文件
set(CMAKE_AUTORCC ON)

# 查找需要的Qt模块
find_package(Qt5 COMPONENTS Widgets REQUIRED)  
find_package(Qt5 COMPONENTS Core REQUIRED)
find_package(Qt5 COMPONENTS Gui REQUIRED)

# 查找源文件
file(GLOB HEADER_FILES ${PROJECT_SOURCE_DIR}/src/*.h)
file(GLOB SOURCE_FILE ${PROJECT_SOURCE_DIR}/src/*.cpp)
file(GLOB RESOURCE_FILE ${PROJECT_SOURCE_DIR}/src/*.qrc)

# 整理生成的.sln的资源目录与本地文件目录保持一致,否则文件们会乱成一盘
# 要group的文件一定也都要放进add_executable命令里,否则不生效
source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${HEADER_FILES})
source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${SOURCE_FILE})
source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${RESOURCE_FILE})

# 指定源文件来生成可执行文件
add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILE} ${RESOURCE_FILE})

# 链接Qt库
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)

# 设置启动项
set_property ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME} )

Qt元对象编译器moc,参考知乎 https://zhuanlan.zhihu.com/p/614208869
Qt + cmake,参考Qt官方文档《Get started with CMake》

在项目根目录下(也就是

CMakeLists.txt

所在的目录哈),打开cmd窗口,执行以下命令:

cmake .

打开生成的helloworld.sln文件。运行。成功!

一些开发经验分享

  1. 我的开发步骤: 设定目标效果 -> 查官方文档的API和教程,理解控件的存在原由和适用范围 -> 一边上手写,一边用chatgpt加速debug -> 遇到chagpt不会的bug,用英文搜谷歌,在StackOverflow查帖子,任何奇特的需求你都可以在谷歌找到经他人验证过的解决方案
  2. 一开始用Qt可以一锅乱炖。但要想有所提高,就必须会Model/View模式,参考:Qt 6.6 > Qt Widgets Model/View Programming 如果你写过java,你或许会知道MVC模式,但在Qt,它倡导的是MV模式。我的理解是,Qt提供的众多基类虽然只有Model和View的区别,但只要它们之间绑上了关系,背后就会有隐式的connect机制调用,也就是隐式地实现了control的功能。所以一般不需要程序员另外实现control了。

本文转载自: https://blog.csdn.net/m0_55476160/article/details/135084297
版权归原作者 Das丶May 所有, 如有侵权,请联系我们删除。

“【Qt】使用visual studio 2022 配置独立的Qt 5.15 开发环境”的评论:

还没有评论