1. HUD基础显示框架搭建

HUD基础显示框架搭建 学习卡片

任务说明

本案例用 Qt(QML + C++)搭建一个 HUD 基础显示窗口:无边框、全屏、背景透明、置顶,并在屏幕中央渲染一段基础文本。这是后续所有 HUD 案例的显示底座。

环境与依赖

  • Qt 5.15 或 Qt 6(含 Qt Quick / Qt Quick Controls 2)
  • CMake 3.16+,C++17 编译器
  • Windows 下透明窗口需开启合成;Linux 下需运行在支持 ARGB 的合成器上

实现思路

用 QQuickView 承载 QML 场景,在 C++ 侧设置窗口标志:FramelessWindowHint(无边框)、WindowStaysOnTopHint(置顶)、TranslucentBackground(透明背景),再调用 showFullScreen() 全屏显示。QML 侧用 Rectangle 作为根节点,color: "transparent" 保证背景透明,用 Text 渲染基础文本。

main.cpp QQuickView 窗口标志 + 全屏 Main.qml 透明根节点 Text 文本渲染 屏幕输出 全屏透明窗口 中央文本 窗口标志:FramelessWindowHint | WindowStaysOnTopHint | TranslucentBackground 显示方式:showFullScreen() QML 根节点:Rectangle { color: "transparent" }

关键代码

工程结构:main.cpp、Main.qml、CMakeLists.txt。

main.cpp

#include <QGuiApplication>
#include <QQuickView>
#include <QQmlEngine>

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

    QQuickView view;
    view.setFlags(Qt::FramelessWindowHint
                  | Qt::WindowStaysOnTopHint
                  | Qt::TranslucentBackground);
    view.setColor(Qt::transparent);
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.setSource(QUrl(QStringLiteral("qrc:/Main.qml")));

    if (view.status() == QQuickView::Error)
        return -1;

    view.showFullScreen();
    return app.exec();
}

Main.qml

import QtQuick 2.15

Rectangle {
    id: root
    color: "transparent"

    Text {
        id: hudText
        anchors.centerIn: parent
        text: "HUD Ready"
        color: "#00E5FF"
        font.pixelSize: 48
        font.bold: true
        style: Text.Outline
        styleColor: "#003344"
    }
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(HudBase LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)

find_package(Qt6 REQUIRED COMPONENTS Quick)
# Qt5 用户改为:find_package(Qt5 REQUIRED COMPONENTS Quick)

qt_add_executable(HudBase main.cpp)
# Qt5 用户改为:add_executable(HudBase main.cpp)

qt_add_qml_module(HudBase
    URI HudBase
    QML_FILES Main.qml
)
# Qt5 用户可改用 qt5_add_resources 或 qrc 方式加载 Main.qml

target_link_libraries(HudBase PRIVATE Qt6::Quick)
# Qt5 用户改为:target_link_libraries(HudBase PRIVATE Qt5::Quick)

构建与运行

cmake -S . -B build
cmake --build build
./build/HudBase

验证方法与通过条件

  • 程序启动后窗口铺满整个屏幕,无标题栏、无边框。
  • 窗口背景完全透明,可看到桌面或其他应用内容。
  • 屏幕中央显示青色描边文本 “HUD Ready”。
  • 窗口始终位于其他窗口之上。
  • 按 Alt+F4(Windows)或 Ctrl+C(终端)可退出,说明事件循环正常。

以上条件全部满足即视为本案例通过。