使用CMake构建Qt5工程指南
ZeroJiu 愚昧之巅V4

下辈子,我要成为太阳。

由于项目需求,需要使用一个GUI界面来操作音视频,选择使用Qt来实现这个简单的界面。由于项目需要跨平台,采用CMake来构建工程,所以Qt工程的构建也需要采用CMake。

Qt文件的处理程序

Qt会对某些文件进行特殊处理,我们使用CMake来生成Qt工程,必须要显式的处理这些文件。

  • 带有Q_OBJECT宏的头文件,需要被moc程序处理
  • .ui界面设计文件,需要被uic程序处理
  • .qrc资源文件,需要被rcc程序处理

接下来,我们会看到,在CMake文件中,如何对上述三种文件进行针对性处理。

生成ui头文件

GUI界面使用Qt Designer进行简单的设计,将设计的test.ui文件保存到工程目录中的//form下。

如果我们这儿不使用CMake,而直接使用Visual Studio,我们可以将ui文件添加到Visual Studio工程中,然后直接右键test.ui文件编译。Visual Studio会调用Qt的uic工具编译test.ui文件,进而生成ui_test.h头文件。

1
2
Uicing ..\..\..\form\test.ui...
Generate ui_test.h

考虑到跨平台,我们需要使用CMake来完成上述操作。CMake提供了QT5_WRAP_UI命令,该命令用来生成ui文件对应的头文件。

1
2
FILE(GLOB FORMS "form/*.ui")
QT5_WRAP_UI(FORMS_UIC ${FORMS})

QT5_WRAP_UI等价于下面命令:

1
uic –o ui_test.h test.ui

生成moc、qrc头文件

和生成ui头文件类似,CMake提供了QT5_WRAP_UIQT5_ADD_RESOURCES两个命令来生成对应的头文件。

1
2
FILE(GLOB MOCS "inc/test.h")
QT5_WRAP_CPP(HEADERS_MOC ${MOCS})
1
2
FILE(GLOB RES "qrc/*.qrc")
QT5_ADD_RESOURCES(RES_RCC ${RES})

将生成的文件添加到项目中

这些生成的文件都被保存在CMAKE_CURRENT_BINARY_DIR文件中,为了使用这些文件,需要:

1
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

然后将这些文件添加到项目中:

1
ADD_EXECUTABLE(gui ${FILES} ${HEADERS_MOC} ${FORMS_UIC} ${RES_RCC})

使用更多的Qt模块

如果想要在项目中使用其他的Qt模块,也必须要在CMake中显式的指明。

1
SET(QT_USE_QTOPENGL TRUE)

常用的模块包括下列:

  • QT_USE_QTNETWORK
  • QT_USE_QTOPENGL
  • QT_USE_QTSQL
  • QT_USE_QTXML
  • QT_USE_QTSVG
  • QT_USE_QTTEST
  • QT_USE_QTDBUS
  • QT_USE_QTSCRIPT
  • QT_USE_QTWEBKIT
  • QT_USE_QTXMLPATTERNS
  • QT_USE_PHONON

项目链接

github项目pro-cmake给出了使用cmake来构建项目的通用模板。其中gui文件夹中,给出了使用cmake来生成Qt5工程的示例。

其他方法

对于uic、moc、rcc操作,cmake还提供了AUTOMOCAUTOUICAUTORCC三个操作,详情可以看参考文献cmake-qt

参考链接

Powered by Hexo & Theme Keep
This site is deployed on
Unique Visitor Page View