文章目录
前言
通常我们在编写qt的时候都是在
Qt creator
中。而如何在
VS Code
中编写qt就是本文需要解决的问题
环境
- Qt配套环境
- cmake
注意:本文的代码所在环境为windows,mingw环境
最好把qt一件套的配置设为我们需要的环境,不然同样是mingw编译器,用别的版本可能会很多奇怪的问题
cmake基础
(CMake) 从下载到构建第一个CMake应用_天赐细莲的博客-CSDN博客_cmake下载教程
(CMake) 库的生成和链接_天赐细莲的博客-CSDN博客_cmake 生成的静态库链接不全
预备的项目代码
先在Qt creator中编写一个小demo,保证是一份能跑的正常代码是一切的前提
文件资源路径
E:\QT\cmake\qt_creator\demo>tree /f
卷 新加卷 的文件夹 PATH 列表
卷序列号为 BAEE-AEDC
E:.
│ demo.pro
│ main.cpp
│ res.qrc
│
├─imgs
│ background.jpg
│
└─modules
mywidget.cpp
mywidget.h
mywidget.ui
demo.pro
QT += core
QT += gui
QT += widgets
SOURCES +=\
main.cpp \
modules/mywidget.cpp
HEADERS +=\
modules/mywidget.h
FORMS +=\
modules/mywidget.ui
RESOURCES +=\
res.qrc
main.cpp
#include<QApplication>#include"./modules/mywidget.h"intmain(int argc,char*argv[]){
QApplication a(argc, argv);
MyWidget w;
w.show();return a.exec();}
res.qrc
<RCC><qresourceprefix="/"><file>imgs/background.jpg</file></qresource></RCC>
mywidget.cpp
#include<QMessageBox>#include"mywidget.h"MyWidget::MyWidget(QWidget *parent):QWidget(parent){
ui.setupUi(this);/// 测试资源
QString style =R"(background : url(://imgs/background.jpg))";
ui.pushButton->setStyleSheet(style);/// 测试元对象connect(ui.pushButton,&QPushButton::clicked,this,[](){QMessageBox::information(Q_NULLPTR,"元对象机制","触发信号槽");});}
mywidget.h
#ifndefMYWIDGET_H#defineMYWIDGET_H#include"ui_mywidget.h"namespace Ui {classMyWidget;}classMyWidget:publicQWidget{
Q_OBJECT
private:
Ui::MyWidget ui;public:MyWidget(QWidget *parent =nullptr);};#endif// MYWIDGET_H
mywidget.ui
<?xml version="1.0" encoding="UTF-8"?><uiversion="4.0"><class>MyWidget</class><widgetclass="QWidget"name="MyWidget"><propertyname="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><propertyname="windowTitle"><string>MyWidget</string></property><widgetclass="QPushButton"name="pushButton"><propertyname="geometry"><rect><x>240</x><y>230</y><width>271</width><height>101</height></rect></property><propertyname="text"><string>触发信号槽</string></property></widget></widget><resources/><connections/></ui>
运行效果
CMake
下面转到vscode中用cmake编译项目
文件资源路径
其实就是多了
CMakeLists.txt
文件
E:\QT\cmake\vscode\demo>tree /f
卷 新加卷 的文件夹 PATH 列表
卷序列号为 BAEE-AEDC
E:.
│ CMakeLists.txt
│ main.cpp
│ res.qrc
│
├─imgs
│ background.jpg
│
└─modules
mywidget.cpp
mywidget.h
mywidget.ui
CMakeLists.txt
# 标注最低版本
cmake_minimum_required(VERSION3.24)
# 设置项目名称
project(demo)
# 设置C++标准 C++11set(CMAKE_CXX_STANDARD11)
# 自动把ui转化为C++代码
# uic qtcmake.ui > ui_qtcmake.h
set(CMAKE_AUTOUICON)
# 自动生成元对象的C++代码
set(CMAKE_AUTOMOCON)
# 自动生成资源文件
set(CMAKE_AUTORCCON)
# 在项目中加入需要编译的文件
add_executable(${PROJECT_NAME}
main.cpp
res.qrc
modules/mywidget.cpp
modules/mywidget.h
modules/mywidget.ui
)
# find_package 查找内部库
# 导入qt的库
# cmake通过qt5提供的查找方案,去查找对应的库
# 这里以查找 Widgets库 为例
find_package(Qt5COMPONENTSWidgetsREQUIRED)
# 根据自己电脑的环境,写死的指定Qt5_DIR这个变量
# 目的是寻找 Qt5Config.cmake 这个文件
set(Qt5_DIRB:/Qt/Qt5.14.2/5.14.2/mingw73_32/lib/cmake/Qt5)
# 指定qt依赖的动态库
# Qt5 自带连接头文件
target_link_libraries(${PROJECT_NAME}Qt5::Widgets)
# 编译指令
# 没 set Qt5_DIR
# cmake -G"MinGW Makefiles"-S.-B build -DQt5_DIR=自己电脑的Qt5路径
# set 了 Qt5_DIR
# cmake -G"MinGW Makefiles"-S.-B build
生成与构建
# 下面两条指令在 CMakeLists.txt 所在路径操作# 生成项目# 用MinGW Makefiles 来执行cmake# -S 源文件 .表示当前位置# -B 构建目录 build 表示生成到build文件夹
cmake -G"MinGW Makefiles"-S.-B build
# 构建# 到build目录进行构建
cmake --build ./build
E:\QT\cmake\vscode\demo>cmake -G"MinGW Makefiles"-S.-B build
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: B:/Qt/Qt5.14.2/Tools/mingw730_32/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: B:/Qt/Qt5.14.2/Tools/mingw730_32/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: E:/QT/cmake/vscode/demo/build
E:\QT\cmake\vscode\demo>cmake --build build
[14%] Automatic MOC and UIC for target demo
[14%] Built target demo_autogen
[28%] Automatic RCC for res.qrc
[42%] Building CXX object CMakeFiles/demo.dir/demo_autogen/mocs_compilation.cpp.obj
[57%] Building CXX object CMakeFiles/demo.dir/main.cpp.obj
[71%] Building CXX object CMakeFiles/demo.dir/modules/mywidget.cpp.obj
[85%] Building CXX object CMakeFiles/demo.dir/demo_autogen/EWIEGA46WW/qrc_res.cpp.obj
[100%] Linking CXX executable demo.exe
[100%] Built target demo
生成
注意:如果没有
set(Qt5_DIR XXX)
则需要在编译指令中指定Qt5_DIR
cmake -G "MinGW Makefiles" -S . -B build -DQt5_DIR=自己电脑的Qt5路径
目的是获取Qt5的
Qt5Config.cmake
执行
cmake -G "MinGW Makefiles" -S . -B build
后,没有提示错误
且生成build中有
- cmake_install.cmake
- CMakeCache.txt
- Makefile
表示生成功
构建
执行
cmake --build ./build
后,没有提示错误
若一切正常
则此时在build中会生成
目标文件
和
目标文件_autogen
的文件夹
并有三个文件夹,分别对应
set(CMAKE_AUTOUIC ON)
uiset(CMAKE_AUTOMOC ON)
元对象set(CMAKE_AUTORCC ON)
资源
运行
注意,博主已经将qt的环境配置到关键变量中,因此可以直接运行
默认有一个命令行窗口
END
参考教程:cmake构建C++ qt项目_哔哩哔哩_bilibili
版权归原作者 天赐细莲 所有, 如有侵权,请联系我们删除。