1. 创建第一个Qt Quick界面

创建第一个Qt Quick界面 学习卡片

任务目标

使用Qt Quick创建一个最小可运行的窗口程序,在窗口中显示文本“Hello Qt Quick”。本案例聚焦于从零搭建一个可编译、可运行的Qt Quick工程,验证Qt开发环境是否就绪。

环境与依赖

  • Qt 5.15及以上版本(或Qt 6.x),需包含Qt Quick和Qt Quick Controls 2模块。
  • 编译器:MSVC 2019/2022(Windows)、GCC(Linux/macOS)或MinGW。
  • 构建工具:CMake 3.16+ 或 qmake(本案例使用CMake)。

工程结构

HelloQtQuick/
├── CMakeLists.txt
├── main.cpp
└── qml/
    └── Main.qml

完整实现代码

CMakeLists.txt — 配置Qt Quick工程构建规则:

cmake_minimum_required(VERSION 3.16)
project(HelloQtQuick VERSION 1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Quick)
# 若使用Qt5,将上面一行替换为:
# find_package(Qt5 REQUIRED COMPONENTS Quick)

qt_add_executable(HelloQtQuick
    main.cpp
)

qt_add_qml_module(HelloQtQuick
    URI HelloQtQuick
    VERSION 1.0
    QML_FILES qml/Main.qml
)

target_link_libraries(HelloQtQuick PRIVATE Qt6::Quick)

main.cpp — 程序入口,加载QML文件:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/qt/qml/HelloQtQuick/qml/Main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

qml/Main.qml — 界面定义,显示目标文本:

import QtQuick
import QtQuick.Window

Window {
    width: 400
    height: 300
    visible: true
    title: qsTr("第一个Qt Quick界面")

    Text {
        anchors.centerIn: parent
        text: qsTr("Hello Qt Quick")
        font.pixelSize: 24
        color: "#2c3e50"
    }
}

运行与验证

  1. 构建:在工程根目录执行以下命令:
mkdir build && cd build
cmake ..
cmake --build .
  1. 运行:执行生成的可执行文件(Windows下为 HelloQtQuick.exe,Linux/macOS下为 ./HelloQtQuick)。
  2. 通过条件:程序启动后弹出窗口,标题栏显示“第一个Qt Quick界面”,窗口中央显示黑色文字“Hello Qt Quick”,字体大小约为24像素。窗口可正常关闭,无控制台报错输出。

常见问题

  • QML模块加载失败:检查CMake中qt_add_qml_module的URI与main.cpp中加载路径是否一致。若使用Qt5,需将import QtQuick改为import QtQuick 2.15,并调整CMake配置。
  • 窗口不显示:确认visible: true已设置,且engine.rootObjects()非空(若为空,QML文件路径错误或语法有误)。
  • 中文乱码:确保源文件保存为UTF-8编码,并在main.cpp顶部添加#include <QTextCodec>(仅Qt5需要,Qt6默认UTF-8)。