珠海免费网站制作,网站的排版包括什么,江都城乡建设局网站,wordpress微信登录设置#x1f608;「CSDN主页」#xff1a;传送门 #x1f608;「Bilibil首页」#xff1a;传送门 #x1f608;「动动你的小手」#xff1a;点赞#x1f44d;收藏⭐️评论#x1f4dd; 文章目录 1. 概述2.qmake与cmake的差异3. qmake示例4.qmake转cmake示例5.MOC、UIC和RCC… 「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文件和资源的管理。 #mermaid-svg-IK9BjV7XcP2ioSIx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx .error-icon{fill:#552222;}#mermaid-svg-IK9BjV7XcP2ioSIx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IK9BjV7XcP2ioSIx .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-IK9BjV7XcP2ioSIx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IK9BjV7XcP2ioSIx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IK9BjV7XcP2ioSIx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IK9BjV7XcP2ioSIx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IK9BjV7XcP2ioSIx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IK9BjV7XcP2ioSIx .marker.cross{stroke:#333333;}#mermaid-svg-IK9BjV7XcP2ioSIx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IK9BjV7XcP2ioSIx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx .cluster-label text{fill:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx .cluster-label span{color:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx .label text,#mermaid-svg-IK9BjV7XcP2ioSIx span{fill:#333;color:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx .node rect,#mermaid-svg-IK9BjV7XcP2ioSIx .node circle,#mermaid-svg-IK9BjV7XcP2ioSIx .node ellipse,#mermaid-svg-IK9BjV7XcP2ioSIx .node polygon,#mermaid-svg-IK9BjV7XcP2ioSIx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IK9BjV7XcP2ioSIx .node .label{text-align:center;}#mermaid-svg-IK9BjV7XcP2ioSIx .node.clickable{cursor:pointer;}#mermaid-svg-IK9BjV7XcP2ioSIx .arrowheadPath{fill:#333333;}#mermaid-svg-IK9BjV7XcP2ioSIx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IK9BjV7XcP2ioSIx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IK9BjV7XcP2ioSIx .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-IK9BjV7XcP2ioSIx .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-IK9BjV7XcP2ioSIx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IK9BjV7XcP2ioSIx .cluster text{fill:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx .cluster span{color:#333;}#mermaid-svg-IK9BjV7XcP2ioSIx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IK9BjV7XcP2ioSIx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Qt项目构建 设置CMake和项目 查找Qt5组件 设置自动MOC, RCC, UIC 添加可执行文件 链接Qt库 2.qmake与cmake的差异
qmake
专注于Qtqmake是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.uimain.cpp
#include QApplication
#include QMainWindow
#include ui_MainWindow.hint 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是啥 MOCMeta-Object Compiler 作用MOC是一个元对象编译器用于处理Qt的信号与槽机制以及其他一些通过Q_OBJECT宏启用的元对象系统的特性。 原理当你在类定义中使用Q_OBJECT宏时MOC将读取这个头文件生成一个包含元信息如信号、槽、属性的附加源文件。这个附加的源文件在编译时与原始类的源文件一起编译。 重要性没有MOC的处理Qt的信号和槽机制无法正常工作。 UICUser Interface Compiler 作用UIC是用户界面编译器用于将由Qt Designer创建的.ui文件XML格式转换成C源代码。 原理UIC会生成一个头文件这个文件包含创建和布局UI组件所需的代码。这样开发者可以直接在代码中使用这些组件。 重要性UIC使得开发者能够方便地通过Qt Designer设计UI并在应用程序中使用这些设计。 RCCResource 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 guicore: 核心非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: 提供串口通信功能