XuQi's Blog

  • 首页

  • 归档

CMake编译QT

发表于 2019-08-01 更新于 2019-10-20

使用CMake编译

开始

使用find_package找到QT库和文件,推荐方法是用target_link_libraries 命令,这个命令回自动的添加头文件目录,编译宏,地址无关代码和链接到qtmain这个库。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required(VERSION 3.1.0)

project(helloworld)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

if(CMAKE_VERSION VERSION_LESS "3.7.0")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

add_executable(helloworld
mainwindow.ui
mainwindow.cpp
main.cpp
resources.qrc
)

target_link_libraries(helloworld Qt5::Widgets)

为了find_package成功找到QT5,它必须在 CMAKE_PREFIX_PATH路径下,或者Qt5_DIR下必须有Qt5config.cmake文件。最简单的办法就是设置环境变量CMAKE_PREFIX_PATH为QT的按照目录。

同时CMAKE_AUTOMOC必须设置为ON。

详见https://cmake.org/cmake/help/latest/manual/cmake-qt.7.html#automoc#)

导入模块

引入模块可以像这样 Qt5_LIBRARIES,比如在target_link_libraries. 实际的路径可以通过以下方式获取:

1
2
3
find_package(Qt5 COMPONENTS Core REQUIRED)

get_target_property(QtCore_location Qt5::Core LOCATION)

很少需要知道完整的路径,每一个QT5模块的库,可以用Qt5::方便的使用。

如果你的有自己的CMake文件,你必须设置debug或者release。例如

1
2
3
4
5
6
7
find_package(Qt5 COMPONENTS Core REQUIRED)

set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage")

# set up a mapping so that the Release configuration for the Qt imported target is
# used in the COVERAGE CMake configuration.
set_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE "RELEASE")

导入插件

插件同样支持导入, Qt Network, Qt SQL, Qt GUI, 和 Qt Widgets 模块都有关联的插件,他们都提供了插件列表,在Qt5<Module>_PLUGINS变量中。

1
2
3
4
foreach(plugin ${Qt5Network_PLUGINS})
get_target_property(_loc ${plugin} LOCATION)
message("Plugin ${plugin} is at location ${_loc}")
endforeach()

Qt Core

https://doc.qt.io/qt-5/qtcore-index.html

核心功能

Qt将这些特性添加到C++中:

1.一种非常强大的机制,用于无缝对象通信,称为信号和插槽
2.可查询和可设计的对象属性
3.组织的层次化和可查询的对象树
4.用保护指针(QPointer)的自然方式拥有对象所有权
5.跨库边界的动态转换

线程和并发编程

Qt以独立于平台的线程类的形式提供线程支持,线程安全的发布事件的方式,以及跨线程的信号槽连接。
多线程编程也是一种有用的范例,它可以在不冻结应用程序的用户界面的情况下执行耗时的操作。Qt页面中的线程支持包含在应用程序中实现线程的信息。额外的并发类由Qt并发模块提供。

输入/输出、资源和容器

Qt提供了一种资源系统,用于组织应用程序文件和资产、一组容器和用于接收输入和打印输出的类:

  1. 容器类
  2. 序列化Qt数据类型
  3. 隐式共享
  4. 此外,Qt核心提供了一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件。
    Qt的资源系统

额外的框架

Qt Core还提供了Qt的一些关键框架:

  1. 动画框架
  2. 在Qt JSON支持
  3. 状态机框架
  4. 如何创建Qt插件
  5. 事件系统

代码下载

http://download.qt.io/archive/qt/5.13/5.13.0/submodules/

QT和JS交互调用

https://blog.csdn.net/caoshangpa/article/details/51014690

# CMake编译QT
V2X之MATLAB
树莓派交叉编译
  • 文章目录
  • 站点概览

XuQi

44 日志
30 标签
  1. 1. 使用CMake编译
    1. 1.1. 开始
    2. 1.2. 导入模块
    3. 1.3. 导入插件
  2. 2. Qt Core
    1. 2.1. 代码下载
© 2019 XuQi
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Muse v7.3.0