这里使用的QT库为5.7版本。
目录
一、添加环境变量
1、QT 库环境变量
QT库根目录环境变量 QTDIR
QT库平台插件环境变量 QT_PLUGIN_PATH
QT库动态库环境变量,bin目录下包含了QT程序运行所需的dll文件,添加到环境变量 Path
2、QML环境变量
除了上述环境变量外,QML还需要额外添加环境支持
QML支持环境变量 QML2_IMPORT_PATH (该环境变量仅在需要使用QML时添加)
二、引入QML
1、qrc 文件配置
新建一个 .qrc 文件,这里命名为 qml.qrc,.qrc是一个Qt资源文件,用于将QML文件、图片等资源打包到一个二进制文件中。
<RCC>
<!-- prefix 定义了资源的访问路径 -->
<qresource prefix="/">
<file>qml/main.qml</file> <!-- main.qml 文件在qml目录下 -->
<file>image.png</file> <!-- image.png在 .qrc 文件同级目录下 -->
</qresource>
</RCC>
后续访问 main.qml 文件的路径格式为:
qrc:<prefix><file>
qrc:/qml/main.qml
2、cmake 配置
(1) cmake引入QT库
find_package(Qt5 COMPONENTS REQUIRED
Gui
Quick
Qml
Core
Widgets
)
if(Qt5_FOUND)
message(STATUS "Qt5 is found")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON) # 自动编译 .ui 文件
set(CMAKE_AUTORCC ON) # 自动编译 .qrc 文件
set(CMAKE_AUTOMOC ON) # 自动编译包含宏 Q_OBJECT 的文件
endif()
(2) 添加 qrc 资源文件
file(GLOB ALL_SOURCES *.c *.cpp)
file(GLOB ALL_INCLUDES *.h *.hpp)
set(ALL_SRCS
${ALL_SOURCES}
${ALL_INCLUDES}
qml.qrc # qml.qrc是一个Qt资源文件,用于将QML文件、图片等资源打包到一个二进制文件中
)
add_executable(${PROJECT_NAME} ${ALL_SRCS})
(3) 目标文件链接到 QT库
target_link_libraries(${PROJECT_NAME}
Qt5::Gui
Qt5::Quick
Qt5::Qml
Qt5::Core
Qt5::Widgets
)
3、测试用例
#include <QtWidgets/QApplication>
#include <QtQml/QQmlApplicationEngine>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
// 显示QML文件
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml"))); // qrc: + <prefix> + <file>
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
三、引入QT
1、cmake配置
QT 引入的步骤可以参考 QML,QT引入不需要 qrc 文件
cmake_minimum_required(VERSION 3.15.0)
project(QTTest)
set(QT_ROOT_PATH "C:/Users/GZX/Desktop/qt5_7_lib_shared_64")
# 添加库的检索路径
list(APPEND CMAKE_PREFIX_PATH ${QT_ROOT_PATH})
find_package(Qt5 COMPONENTS
Gui
Core
Widgets
)
# 添加头文件路径
include_directories(${QT_ROOT_PATH}/include)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON) # 自动编译.ui文件
set(CMAKE_AUTORCC ON) # 自动编译.qrc文件
set(CMAKE_AUTOMOC ON) # 自动编译包含宏Q_OBJECT的文件
add_executable(${PROJECT_NAME} qtTest.cpp)
target_link_libraries(${PROJECT_NAME}
Qt5::Core
Qt5::Widgets
Qt5::Gui
)
2、测试用例
#include <QtWidgets/QLabel>
#include <QtWidgets/QApplication>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show();
app.exec();
return 0;
}