当前位置: 首页 > news >正文

cmake结合qt开发界面程序实例

在使用 CMake 构建 Qt 界面应用程序时,你需要设置 CMakeLists.txt 文件来指定项目配置、源文件、库依赖等。以下是一个简单的示例,展示了如何创建一个包含 Qt 界面(使用 QWidget)的 Qt 项目,并使用 CMake 进行构建。

1. 创建项目目录结构

首先,创建一个项目目录结构,例如:

MyQtApp/
├── CMakeLists.txt
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
└── resources/
    └── MyQtApp.qrc

2. 编写 CMakeLists.txt

MyQtApp/ 目录下创建 CMakeLists.txt 文件,内容如下:

cmake_minimum_required(VERSION 3.15) # 最低支持版本
project(MyApp VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)          # 设置标准为C++17
set(CMAKE_AUTOMOC ON)               # 自动处理Moc(Meta Object Compiler)
set(CMAKE_AUTOUIC ON)              # 自动生成ui对应的头文件(.h)
set(CMAKE_AUTORCC ON)              # 如果需要资源文件则启用Rcc(Resource Compiler)

find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)  # 查找所需模块

#生成的可执行文件可双击运行
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")

# Specify source files
set(SOURCES
    main.cpp
    mainwindow.cpp
)
set(HEADERS
    mainwindow.h
)
set(UIS
    mainwindow.ui
)
# Add executable
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS} ${UIS} ${RESOURCES_RCC})

target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets) # 连接库

3. 编写源文件

main.cpp、mainwindow.h、mainwindow.cpp、mainwindow.ui 均使用QT默认生成的文件,可参考编写;

resources/MyQtApp.qrc

如果不需要资源文件,可以省略这部分。如果需要,可以创建一个简单的资源文件,例如:

<RCC>
    <qresource prefix="/">
        <file>images/logo.png</file>
    </qresource>
</RCC>

4. 构建和运行

打开终端,找到项目目录,即CMakeLists.txt所在目录,然后运行以下命令:

mkdir build
cd build            # 创建build目录用于存放中间产物等信息避免污染原代码树
rm -rf *
cmake ..                          # 调用cmake解析配置初始化构建环境
make                              # 或者'msvc'等相关IDE指定操作实际完成编译链接全过程
cd ..
./build/MyApp                           # 启动应用程序检查效果是否正常工作

注意事项

  1. Qt 版本:确保你安装了 Qt5,并且 qt5-default(在 Debian/Ubuntu 上)或相应的开发包已经安装。
  2. CMake 版本:确保你使用的 CMake 版本支持 find_package 和 Qt5 的模块。
  3. Qt Designer:你可以使用 Qt Designer 创建复杂的 UI 文件,并将其保存到 mainwindow.ui 中。

相关文章:

  • 二、小白学JAVA-认识数据类型【变量】
  • 【数学建模】TOPSIS法简介及应用
  • 在不考虑符号,不考虑溢出的情况下,用循环将字符串转换为整型做乘积 再用字符串形式输出
  • 前端剪贴板操作:从传统方法到现代方案
  • 【数据库】如何用索引优化查询性能
  • Kafka-Exporter 9308端口启用TLS认证的完整指南
  • 机器学习 Day07seaborn库绘图学习
  • 【愚公系列】《高效使用DeepSeek》015-文献摘要生成
  • Qt 读取数据库
  • 《FiLM: Visual Reasoning with a General Conditioning Layer》一种通用的视觉推理条件层方法(代码实现)
  • 技术点提升效率详解
  • VBA代码
  • 基于多头注意机制的多尺度特征融合的GCN的序列数据(功率预测、故障诊断)模型及代码详解
  • 算法训练篇01 -- 力扣283.移动零
  • LogicFlow介绍
  • 0基础 | 上下拉电阻典型应用场景
  • Linux安装JDK17
  • SAP DOI EXCEL应用
  • [HelloCTF]PHPinclude-labs超详细WP-Level 5-http协议-2
  • Mysql:关于命名
  • 上市公司重大资产重组新规九要点:引入私募“反向挂钩”,压缩审核流程
  • 一个留美学生的思想转向——裘毓麐的《游美闻见录》及其他
  • 民间打拐志愿者上官正义遭人身安全威胁,杭州公安:已立案
  • 白玉兰奖征片综述丨海外剧创作趋势观察:跨界·融变·共生
  • 赡养纠纷个案推动类案监督,检察机关保障特殊群体胜诉权
  • 视频丨中国海警成功救助8名外籍遇险渔民,韩方向中方致谢