Qt6.5 CMake项目配置

2023-10-30 05:20
文章标签 配置 项目 cmake qt6.5

本文主要是介绍Qt6.5 CMake项目配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt6.5 CMake项目配置

参考Qt 安装文档
参考Qt CMake文档

Qt CMake配置与版本关联度比较高,不过Qt6.5以后的版本应该差不多

但是Qt6.5之前的配置方法可能就不同了,比如qt_standard_project_setup()可能就是不可用的

配置Qt路径

在Qt安装后,Qt并没有被自动添加到系统环境下

设置CMake的CMAKE_PREFIX_PATH

set(CMAKE_PREFIX_PATH "/opt/Qt/6.5.2/gcc_64;${CMAKE_PREFIX_PATH}")

这个目录为Qt编译器目录,是binincludemodules目录所在的目录

设置C++版本

Qt6是基于C++17构建的,所以需要设置C++版本

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

获取Qt库

使用find_package函数,具体格式如下

find_package(Qt6 REQUIRED COMPONENTS LinguistTools Core Widgets)
  • LinguistTools,翻译工具,需要启用多语言的会用到这个库,提供了CMake配置ts文件的工具,不需要链接
  • Core,Qt的Core库,提供了头文件和库列表,需要链接
  • Widgets,Qt的Widgets库,QWidget等类都在这个模块下,需要链接

设置Qt CMake通用配置

这一步是最重要的,也是最容易出问题的地方,需要用到qt_standard_project_setup()

这个函数在Qt6.3才被引入,更早的版本都没法使用这个函数

使用时只要添加这个函数到CMake里面即可

qt_standard_project_setup()

配置源代码和UI文件

在项目里添加源文件和头文件,以及对应的UI文件,项目结构如下

.
├── CMakeLists.txt
├── main.cpp
├── MainWindow.cpp
├── MainWindow.h
├── MainWindow.ui
└── README.md

Qt提供了一个qt_add_executable函数,用法和CMake的add_executable一致

ui文件可以和普通代码文件一样,直接添加,Qt提供的工具,告诉了CMake这些UI文件该怎么处理

qt_add_executable(${PROJECT_NAME}main.cppMainWindow.hMainWindow.cppMainWindow.ui
)

到这一步为止,一个基本的Qt程序就基本完成了,只要链接对应的库就可以运行

没有翻译文件,也没有资源文件

注意:ui文件会被UIC生成一个头文件;
但是这个头文件在构建项目的时候不会生成;
只有在编译的时候才会生成;
因此,当在cpp文件中添加头文件时报错,不要担心;
编译一次就可以解决;

添加资源文件

如果程序不需要资源文件,可以直接忽略

在Qt下,这个资源文件不要自己添加,只要在CMake中配置就行

CMake会调用Qt工具,自动生成qrc文件

qrc中需要添加的文件路径,前缀等,都在CMake中配置

详细用法,可以参考Qt文档qt_add_resources

该模块依赖与Core模块

find_package(Qt6 REQUIRED COMPONENTS Core)

基础用法如下:

qt_add_resources(${PROJECT_NAME}${PROJECT_NAME} PREFIX "/" FILESREADME.md
)

第一个${PROJECT_NAME}是目标项目,第二个${PROJECT_NAME}是文件名

README.md就是要添加的文件,因为该文件和CMakeLists文件在同一个文件夹下,所以直接写了文件名

可以在后面添加更多的文件

添加翻译文件

翻译文件以ts结尾

在CMake中,不要创建ts文件,CMake会自动生成

添加翻译文件会用到qt_add_translations函数

该函数需要依赖LinguistTools模块

find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
qt_add_translations(${PROJECT_NAME}TS_FILES"${PROJECT_NAME}_en.ts""${PROJECT_NAME}_fr.ts"
)

第一个参数是添加目标,然后给一个TS_FILES标记,表示后面的都是ts文件了

可以一次添加多个ts文件

具体用法可以参考Qt文档:qt_add_translations

这个函数会在CMake项目里添加两个目标:update_translationsrelease_translations

就像add_executable添加出来的xxx目标一样

CMake和Qt是通过运行这两个目标的方式实现更新翻译文件的

可能会感到有点奇怪,但是这就是他们的实现机制,不要过多考虑

此时并没有ts文件,需要单独运行构建目标的命令

运行下面的命令更新ts文件

$ cmake --build . --target update_translations

再运行下面的命令生成qm文件

$ cmake --build . --target release_translations

注意:这两个目标必须按顺序单独执行,不能build all,否则ts文件会生成异常

最后,生成的qm文件被自动添加到了qrc资源文件里面,前缀是/i18n

添加头文件目录和链接库

这部分主要是头文件目录的指定

在模块被发现后,会自动设置一些变量,头文件目录就是其中一个

比如Widgets模块,其头文件目录就是${Qt6Widgets_INCLUDE_DIRS}

# 添加头文件目录,实际测试中,不添加好像也没问题
target_include_directories(${PROJECT_NAME} PRIVATE ${Qt6Widgets_INCLUDE_DIRS})
# 链接Qt相关库,其它Qt库也都是这种格式
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets)

设置目标属性

主要在Windows和MACOS下起作用

目的是禁用命令行窗口

set_target_properties(${PROJECT_NAME} PROPERTIESWIN32_EXECUTABLE ONMACOSX_BUNDLE ON
)

问题及解决

首先,安装Qt的时候就应该安装相关依赖

sudo apt-get install build-essential libgl1-mesa-dev
[cmake] -- Could NOT find XKB (missing: XKB_LIBRARY XKB_INCLUDE_DIR) (Required is at least version "0.5.0")
[cmake] -- Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)

使用以下命令安装相关依赖

sudo apt install libxkbcommon-dev libvulkan-dev

项目文件结构

.
├── build
├── CMakeLists.txt
├── Demo_en.ts
├── Demo_fr.ts
├── main.cpp
├── MainWindow.cpp
├── MainWindow.h
├── MainWindow.ui
└── README.md

其中ts文件是自动生成在当前目录的

qrc和qm文件以及ui的头文件都生成在了build目录内

源码

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project("Demo" VERSION 1.0.0 LANGUAGES CXX)# 设置Qt路径
set(CMAKE_PREFIX_PATH "/opt/Qt/6.5.2/gcc_64;${CMAKE_PREFIX_PATH}")# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 寻找Qt6库以及其中各种模块
find_package(Qt6 REQUIRED COMPONENTS LinguistTools Core Widgets)
# Qt CMake通用设置
qt_standard_project_setup()# 添加文件到应用程序,这是Qt提供的工具,因此ui文件也可以直接添加进去
# 需要注意,这个ui文件会生成一个ui_xxx.h的头文件
# 不过这个头文件需要在第一次编译之后才会生成,所以构建结束后找不到这个头文件是正常的
qt_add_executable(${PROJECT_NAME}main.cppMainWindow.hMainWindow.cppMainWindow.ui
)qt_add_resources(${PROJECT_NAME}${PROJECT_NAME} PREFIX "/" FILESREADME.md
)qt_add_translations(${PROJECT_NAME}TS_FILES"${PROJECT_NAME}_en.ts""${PROJECT_NAME}_fr.ts"
)
# qt_add_lupdate(${PROJECT_NAME} TS_FILES "${PROJECT_NAME}_en.ts" "${PROJECT_NAME}_fr.ts")
# qt_add_lrelease(${PROJECT_NAME} TS_FILES "${PROJECT_NAME}_en.ts" "${PROJECT_NAME}_fr.ts")# 添加头文件目录,实际测试中,不添加好像也没问题
target_include_directories(${PROJECT_NAME} PRIVATE ${Qt6Widgets_INCLUDE_DIRS})
# 链接Qt相关库,其它Qt库也都是这种格式
target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets)# 设置应用程序属性,主要在Windows和MACOS下起作用
set_target_properties(${PROJECT_NAME} PROPERTIESWIN32_EXECUTABLE ONMACOSX_BUNDLE ON
)

MainWindow.h

#ifndef _MAIN_WINDOW_H_
#define _MAIN_WINDOW_H_#include <QWidget>namespace Ui {
class uiMainWid;
} // namespace Uiclass MainWindow : public QWidget {Q_OBJECT;public:MainWindow(QWidget* parent = nullptr);~MainWindow();void onClickSearch();private:Ui::uiMainWid* ui = nullptr;
};#endif

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QFile>MainWindow::MainWindow(QWidget* parent): QWidget(parent), ui(new Ui::uiMainWid)
{ui->setupUi(this);setWindowTitle(MainWindow::tr("羽飞的主页"));connect(ui->uiSearchBtn, &QPushButton::clicked, this, &MainWindow::onClickSearch);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onClickSearch()
{QString txt = ui->uiLineEdit->text();if (txt.isEmpty()) {QFile doc { ":/README.md" };bool isOk = doc.open(QIODevice::ReadOnly);if (!isOk) {ui->uiTxtEdit->setPlainText(MainWindow::tr("文件读取错误"));return;}txt = doc.readAll();ui->uiTxtEdit->setPlainText(txt);}
}

这篇关于Qt6.5 CMake项目配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305830

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧