禁止WordPress访问官网/成都网站优化seo
😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「动动你的小手」:点赞👍收藏⭐️评论📝
文章目录
- 1. 概述
- 2.qmake与cmake的差异
- 3. qmake示例
- 4.qmake转cmake示例
- 5.MOC、UIC和RCC是啥
- 6. 实战使用技巧与注意事项
- 7.qmake添加qt包
- 8.cmake添加Qt包
1. 概述
在CMake中构建Qt项目意味着能够高效地管理和编译Qt应用程序和库。CMake提供了一套强大的工具和方法来处理Qt的特殊构建需求,如MOC(元对象编译器)处理、UI文件和资源的管理。
2.qmake与cmake的差异
- qmake
- 专注于Qt:qmake是Qt框架的一部分,主要用于构建使用Qt的应用程序。它天生支持Qt的各种特性,如信号和槽、国际化、资源文件等。
- 配置简单:对于纯Qt项目,qmake的配置文件(.pro文件)通常更简单,更易于编写和维护。
- 跨平台:虽然qmake支持跨平台构建,但其核心功能主要集中在Qt应用程序上。
- 限制:qmake在非Qt项目的通用性和灵活性方面受到限制,特别是在处理复杂构建场景时。
- CMake
- 通用性:CMake是一个更通用的构建系统工具,适用于各种C++项目,包括但不限于Qt应用程序。
- 高度灵活:CMake提供了更多的高级特性和更大的灵活性来处理复杂的构建需求。
- 广泛支持:CMake得到广泛的支持和使用,是许多开源项目和大型应用程序的首选构建系统。
- 学习曲线:由于其功能丰富和灵活性高,CMake的学习曲线可能会比qmake陡峭。
- 跨平台构建:CMake在处理跨平台构建方面表现更好,支持生成多种IDE和构建系统的工程文件。
- 集成和扩展:CMake支持更广泛的集成和扩展,如测试、打包、导入/导出目标等
3. qmake示例
- MyQtProject.pro
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = MyQtProject
TEMPLATE = appSOURCES += main.cppFORMS += MainWindow.ui
- main.cpp
#include <QApplication>
#include <QMainWindow>
#include "ui_MainWindow.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow mainWindow;Ui::MainWindow ui;ui.setupUi(&mainWindow);mainWindow.show();return app.exec();
}
4.qmake转cmake示例
- CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyQtProject)#设置Qt的安装路径,如果Qt没有在环境变量中
#set(CMAKE_PREFIX_PATH "/path/to/Qt")# Find the QtWidgets library
find_package(Qt5Widgets CONFIG REQUIRED)# 启用自动MOC、UIC和RCC
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)# Add an executable
add_executable(MyQtProject main.cpp MainWindow.ui)# Use the Widgets module from Qt 5
target_link_libraries(MyQtProject Qt5::Widgets)
5.MOC、UIC和RCC是啥
-
MOC(Meta-Object Compiler):
-
作用:MOC是一个元对象编译器,用于处理Qt的信号与槽机制以及其他一些通过
Q_OBJECT
宏启用的元对象系统的特性。 -
原理:当你在类定义中使用
Q_OBJECT
宏时,MOC将读取这个头文件,生成一个包含元信息(如信号、槽、属性)的附加源文件。这个附加的源文件在编译时与原始类的源文件一起编译。 -
重要性:没有MOC的处理,Qt的信号和槽机制无法正常工作。
-
-
UIC(User Interface Compiler):
-
作用:UIC是用户界面编译器,用于将由Qt Designer创建的
.ui
文件(XML格式)转换成C++源代码。 -
原理:UIC会生成一个头文件,这个文件包含创建和布局UI组件所需的代码。这样,开发者可以直接在代码中使用这些组件。
-
重要性:UIC使得开发者能够方便地通过Qt Designer设计UI,并在应用程序中使用这些设计。
-
-
RCC(Resource Compiler):
-
作用:RCC是资源编译器,用于将资源文件(如图片、翻译文件、其他文件)编译成二进制格式。
-
原理:RCC会处理
.qrc
资源文件,这些文件以XML格式列出了项目中使用的资源。RCC生成一个包含资源数据的源文件。 -
重要性:RCC允许开发者将资源文件(如图标、翻译文件等)嵌入到应用程序的二进制文件中,方便资源的打包和部署
-
6. 实战使用技巧与注意事项
- 确保安装了Qt和CMake的适当版本。
- 使用
CMAKE_AUTOMOC
,CMAKE_AUTORCC
,CMAKE_AUTOUIC
自动处理MOC、RCC和UIC。 - 在
find_package
中明确指定需要的Qt模块。 - 使用
target_link_libraries
正确链接Qt库。
7.qmake添加qt包
QT += core gui
- core: 核心非GUI功能,如事件循环、核心数据类型等。
- gui: 图形用户界面组件,如窗口、控件。
- widgets: 高级GUI组件,如按钮、文本框、滑块等。
- network: 网络通信功能。
- sql: 数据库支持。
- qml: QML - Qt 声明式语言支持。
- quick: Qt Quick 框架,用于构建现代UI。
- multimedia: 音视频播放和录制。
- bluetooth: 蓝牙功能支持。
- websockets: WebSocket通信支持。
- xml: XML处理功能。
- opengl: OpenGL集成。
- printsupport: 打印支持。
8.cmake添加Qt包
CMake中Qt添加包的方式,如果是Qt6就把Qt5改成Qt6
注意部分模块Qt6没有了,详情的话查官方文档
Qt5: https://doc.qt.io/qt-5/qtmodules.html
Qt6: https://doc.qt.io/qt-6/qtmodules.html
find_package(Qt5 COMPONENTS Widgets Network REQUIRED)
target_link_libraries(YourApp Qt5::Widgets Qt5::Network)
- Qt5Core: 核心模块,提供非GUI功能的基本类。
- Qt5Gui: 图形用户界面组件,处理图形元素。
- Qt5Widgets: 提供丰富的界面组件,用于构建桌面应用。
- Qt5Network: 提供网络通信功能。
- Qt5Multimedia: 用于处理音频、视频等多媒体内容。
- Qt5Sql: 提供SQL数据库支持。
- Qt5Qml: 支持QML,用于开发动态用户界面。
- Qt5Quick: 结合Qt5Qml使用,快速开发现代UI。
- Qt5WebEngine: 嵌入Web内容的功能,基于Chromium。
- Qt5Test: 提供单元测试功能。
- Qt5OpenGL: 提供OpenGL集成支持。
- Qt5Xml: 处理XML数据的功能。
- Qt5Concurrent: 提供并发编程支持。
- Qt5PrintSupport: 提供打印功能支持。
- Qt5Svg: 支持SVG文件格式。
- Qt5Bluetooth: 提供蓝牙功能支持。
- Qt5Location: 提供地理位置和地图功能。
- Qt5Sensors: 提供访问硬件传感器的功能。
- Qt5WebSockets: 提供WebSocket通信支持。
- Qt5QmlModels: 提供QML数据模型支持。
- Qt5SerialPort: 提供串口通信功能
相关文章:

CMake入门教程【高级篇】qmake转cmake
😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1. 概述2.qmake与cmake的差异3. qmake示例4.qmake转cmake示例5.MOC、UIC和RCC…...

c#图片作为鼠标光标
图片转换为鼠标光标代码如下: private void Form1_Load(object sender, EventArgs e) {//button1.Cursor System.Windows.Forms.Cursors.Hand;Bitmap bmp new Bitmap("780.jpg");Cursor cursor new Cursor(bmp.GetHicon());button1.Cursor cursor;} …...

微信小程序swiper实现层叠轮播图
在微信小程序中,需要实现展示5个,横向层叠的轮播图效果,轮播图由中间到2侧的依次缩小.如下图 使用原生小程序进行开发,没有使用Skyline模式,所以layout-type配置项也无效。所以基于swiper组件进行调整。 主要思路就是设置不同的样式ÿ…...

揭露欧拉骗局第二篇:逼近公式“Σ1/n=lnn+C”。
Σ1/nlnnC是欧拉为调和级数创造(注意是创造、而不是发现)的“逼近公式”,它在欧系大名鼎鼎,因为它解决了欧洲人百筹莫展的“调和级数求和问题”。 “lnnC”是欧拉的发明,欧拉认为n→∞时,Σ1/nlnn常数,这个常数就是欧…...

MYSQL的学习——单行函数详解
目录 1. 数值函数 1) 基本函数 2) 角度与弧度互换函数 3) 三角函数 4) 指数与对数函数 5) 进制间的转换 2. 字符串函数 3. 日期和时间函数 1) 获取日期、时间 2) 日期与时间戳的转换 3) 获取月份、星期、星期数、天数等函数 4) 日期的操作函数 5) 时间和秒钟转换的…...

深度解析Cron表达式:精确控制任务调度的艺术
深度解析Cron表达式:精确控制任务调度的艺术 希望我们都可以满怀期待的路过每一个转角 去遇见 那个属于自己故事的开始 去追寻那个最真实的自己 去放下 去拿起 安然,自得,不受世俗牵绊… 导言 在计算机科学领域,任务调度是一项关…...

java实现AES256对称加解密工具类
一、引入依赖包 引入相关依赖包 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version> </dependency> <!--lombok用于简化实体类开发--> <dependency&g…...

其他排序(基数排序,希尔排序和桶排序)(数据结构课设篇3,python版)(排序综合)
本篇博客主要详细讲解一下其他排序(基数排序,希尔排序和桶排序)也是排序综合系列里最后一篇博客。第一篇博客讲解的是LowB三人组(冒泡排序,插入排序,选择排序)(数据结构课设篇1&…...

【复现】DiffTalk
code:GitHub - sstzal/DiffTalk: [CVPR2023] The implementation for "DiffTalk: Crafting Diffusion Models for Generalized Audio-Driven Portraits Animation" 问题1. ERROR: Failed building wheel for pysptk Cython.Compiler.Errors.CompileError:…...

SQLServer 系统概述
目录 1.SQL语言的发展和特点 2.SQL语言的特点 1.SQL语言的发展和特点 SQL是利用一些简单的语句构成的基本语法,来存储数据库的内容。目前已经成为关系型数据库系统中使用最广泛的语言。 1974年SQL语言由Boyce和Chamberlin提出来。 1975~1979年研制了著名的关系数…...

Vue3 + TS + Element-Plus —— 项目系统中封装表格+搜索表单 十分钟写五个UI不在是问题
前期回顾 纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式,纵横合并-CSDN博客https://blog.csdn.net/m0_57904695/article/details/135537511?spm1001.2014.3001.5501 目录 一、🛠️ newTable.vue 封装Table 二、🚩 newForm.vue …...

Linux系统——测试端口连通性方法
目录 一、TCP端口连通性测试 1、ssh 2、telnet(可能需要安装) 3、curl 4、tcping(需要安装) 5、nc(需要安装) 6、nmap(需要安装) 二、UDP端口连通性测试 1、nc(…...

Python虚拟环境轻松配置:Jupyter Notebook中的内核管理指南
问题 在Python开发中,一些人在服务器上使用Jupyter Notebook中进行开发。一般是创建虚拟环境后,向Jupyter notebook中添加虚拟环境中的Kernel,后续新建Notebook中在该Kernel中进行开发,这里记录一下如何创建Python虚拟环境以及添…...

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行
目录 1. 🥙collect_list: 聚合-不去重 2. 🥙collect_set(col): 聚合-去重 3. 🥙mysql的聚合函数-group_concat 4. leetcode练习题 1. 🥙collect_list: 聚合-不去重 将组内的元素收集成数组 不会去重 2. 🥙collec…...

【AI视野·今日NLP 自然语言处理论文速览 第七十三期】Tue, 9 Jan 2024
AI视野今日CS.NLP 自然语言处理论文速览 Tue, 9 Jan 2024 Totally 80 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers FFSplit: Split Feed-Forward Network For Optimizing Accuracy-Efficiency Trade-off in Language Model Infe…...

vue知识-03
购物车案例 要实现的功能: 1、计算商品总价格 2、全选框和取消全选框 3、商品数量的增加和减少 <body> <div id"app"><div class"row"><div class"col-md-6 col-md-offset-3"><h1 class"text-center…...

关于httpClient 使用的注意事项
关于httpClient 使用的注意事项 用例 PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager();// 最大连接数-不设置默认20connectionManager.setMaxTotal(200);// 每个路由最大连接数-不设置默认2connectionManager.setDefaultMax…...

Docker 发布自定义镜像到公共仓库
Docker 发布自定义镜像到公共仓库 引言 Docker 是一种轻量级、便携式的容器化技术,可以使应用程序在不同环境中更加可移植。在本文中,我们将学习如何使用 Docker 从公共仓库拉取 Nginx 镜像,定制该镜像,添加自定义配置文件&…...

程序员有哪些接单的渠道?
这题我会!程序员接单的渠道那可太多了,想要接到合适的单子,筛选一个合适的平台很重要。如果你也在寻找一个合适的接单渠道,可以参考以下这些方向。 首先,程序员要对接单有一个基本的概念:接单渠道可以先粗略…...

服务容错-熔断策略之断路器hystrix-go
文章目录 概要一、服务熔断二、断路器模式三、hystrix-go3.1、使用3.2、源码 四、参考 概要 微服务先行者Martin Fowler与James Lewis在文章microservices中指出了微服务的九大特征,其中一个便是容错性设计(Design for failure)。正如文章中提到的,微服…...

C++进阶(三)多态
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、多态的概念1、概念 二、多态的定义及实现1、多态的构成条件2、虚函数3、虚函数的重写4、C…...

大众汽车宣布将ChatGPT,批量集成在多种汽车中!
1月9日,大众汽车在官网宣布,将ChatGPT批量集成到电动、内燃机汽车中。 大众表示,将ChatGPT与其IDA语音助手相结合,用户通过自然语言就能与ChatGPT进行互动,例如,帮我看看最近的三星米其林饭店在哪里&#…...

React----函数组件和类组件
函数组件与类组件:React 中的两种组件风格 React 是一个用于构建用户界面的流行 JavaScript 库,其中组件是构建块的基本单元。在 React 中,有两种主要的组件风格:函数组件和类组件。本文将使用TypeScript介绍它们的用法、区别以及…...

Kafka集群部署 (KRaft模式集群)
KRaft 模式是 Kafka 在 3.0 版本中引入的新模式。KRaft 模式使用了 Raft 共识算法来管理 Kafka 集群元数据。Raft 算法是一种分布式共识算法,具有高可用性、可扩展性和安全性等优势。 在 KRaft 模式下,Kafka 集群中的每个 Broker 都具有和 Zookeeper 类…...

Vue 自定义仿word表单录入之日期输入组件
因项目需要,要实现仿word方式录入数据,要实现鼠标经过时才显示编辑组件,预览及离开后则显示具体的文字。 鼠标经过时显示 正常显示及离开时显示 组件代码 <template ><div class"paper-input flex flex-col border-box "…...

Oracle与Java JDBC数据类型对照
Oracle Database JDBC开发人员指南和参考 SQL Data TypesJDBC Type CodesStandard Java TypesOracle Extension Java Types CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.Types.VARCHAR java.lang.String oracle.sql.CHAR LONG jav…...

C++力扣题目226--翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:root [2,1,3] 输出:[2,3,1]示例 3&#x…...

Gorm 数据库表迁移与表模型定义
文章目录 一、Docker快速创建MySQL实例1.1 创建1.3 创建数据库 二、AutoMigrate介绍与使用2.1 AutoMigrate介绍2.2 AutoMigrate 基本使用 三、模型定义3.1 模型定义3.2 快速增删改查3.3 约定3.4 gorm.Model 四、表模型主键、表名、列名的约定4.1 主键(Primary Key&a…...

系列三、Spring Security中自定义用户名/密码
一、Spring Security中自定义用户名/密码 1.1、自定义用户名/密码 1.1.1、配置文件中配置 spring.security.user.nameroot spring.security.user.password123456 1.1.2、定义基于内存的用户 /*** Author : 一叶浮萍归大海* Date: 2024/1/11 21:50* Description:*/ Configu…...

如何顺滑使用华为云编译构建平台?
这两年平台构建服务需求越来越大,却一直苦于找不到一些指南, 这里特意写了一篇, 对在学习代码阶段和新手程序员朋友也蛮友好, 配置真的也不难, 也特别适合想尝试从0到1做个APP的朋友了。 以华为云的CodeArts Build为例…...