下辈子,我要成为太阳。
由于项目需求,需要使用一个GUI界面来操作音视频,选择使用Qt来实现这个简单的界面。由于项目需要跨平台,采用CMake来构建工程,所以Qt工程的构建也需要采用CMake。
Qt会对某些文件进行特殊处理,我们使用CMake来生成Qt工程,必须要显式的处理这些文件。
Q_OBJECT
宏的头文件,需要被 moc
程序处理 .ui
界面设计文件,需要被 uic
程序处理 .qrc
资源文件,需要被 rcc
程序处理 接下来,我们会看到,在CMake文件中,如何对上述三种文件进行针对性处理。
GUI界面使用Qt Designer进行简单的设计,将设计的test.ui文件保存到工程目录中的 //form
下。
如果我们这儿不使用CMake,而直接使用Visual Studio,我们可以将ui文件添加到Visual Studio工程中,然后直接右键test.ui文件编译。Visual Studio会调用Qt的uic工具编译test.ui文件,进而生成ui_test.h头文件。
Uic'ing ../../../form/test.ui... Generate ui_test.h
考虑到跨平台,我们需要使用CMake来完成上述操作。CMake提供了 QT5_WRAP_UI
命令,该命令用来生成ui文件对应的头文件。
FILE(GLOB FORMS "form/*.ui") QT5_WRAP_UI(FORMS_UIC ${FORMS})
QT5_WRAP_UI
等价于下面命令:
uic –o ui_test.h test.ui
和生成ui头文件类似,CMake提供了 QT5_WRAP_UI
和 QT5_ADD_RESOURCES
两个命令来生成对应的头文件。
FILE(GLOB MOCS "inc/test.h") QT5_WRAP_CPP(HEADERS_MOC ${MOCS})
FILE(GLOB RES "qrc/*.qrc") QT5_ADD_RESOURCES(RES_RCC ${RES})
这些生成的文件都被保存在 CMAKE_CURRENT_BINARY_DIR
文件中,为了使用这些文件,需要:
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
然后将这些文件添加到项目中:
ADD_EXECUTABLE(gui ${FILES} ${HEADERS_MOC} ${FORMS_UIC} ${RES_RCC})
如果想要在项目中使用其他的Qt模块,也必须要在CMake中显式的指明。
SET(QT_USE_QTOPENGL TRUE)
常用的模块包括下列:
github项目 pro-cmake 给出了使用cmake来构建项目的通用模板。其中gui文件夹中,给出了使用cmake来生成Qt5工程的示例。