下辈子,我要成为太阳。
由于项目需求,需要使用一个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 | Uicing ..\..\..\form\test.ui... |
考虑到跨平台,我们需要使用CMake来完成上述操作。CMake提供了QT5_WRAP_UI
命令,该命令用来生成ui文件对应的头文件。
1 | FILE(GLOB FORMS "form/*.ui") |
QT5_WRAP_UI
等价于下面命令:
1 | uic –o ui_test.h test.ui |
生成moc、qrc头文件
和生成ui头文件类似,CMake提供了QT5_WRAP_UI
和QT5_ADD_RESOURCES
两个命令来生成对应的头文件。
1 | FILE(GLOB MOCS "inc/test.h") |
1 | FILE(GLOB RES "qrc/*.qrc") |
将生成的文件添加到项目中
这些生成的文件都被保存在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还提供了AUTOMOC
、AUTOUIC
、AUTORCC
三个操作,详情可以看参考文献cmake-qt