1. 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、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(终端)可退出,说明事件循环正常。
以上条件全部满足即视为本案例通过。