Qt中实现窗口真全屏(覆盖Windows任务栏)

目录

一、目标定义先说清

二、覆盖Windows任务栏的推荐写法(先show再setGeometry)

[最稳方案:无边框 + 原生屏幕 geometry](#最稳方案:无边框 + 原生屏幕 geometry)

[Qt Widgets(最常用)](#Qt Widgets(最常用))

[一行版(简单窗口 / QWidget)](#一行版(简单窗口 / QWidget))

[三、Qt 6 / QWindow](#三、Qt 6 / QWindow)

[四、真·Kiosk / 工控模式(Windows 下最强)](#四、真·Kiosk / 工控模式(Windows 下最强))

[Windows + Qt Widgets(100% 盖任务栏)](#Windows + Qt Widgets(100% 盖任务栏))

[五、showFullScreen() 为什么"不一定"盖任务栏?](#五、showFullScreen() 为什么“不一定”盖任务栏?)

平台差异表

六、多屏:盖指定屏幕(不是主屏)

七、常见错误

[1.用 availableGeometry](#1.用 availableGeometry)

[2.show() 前 setGeometry(Windows)](#2.show() 前 setGeometry(Windows))

八、终极推荐模板

九、一句话总结


觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。

由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。

在 Qt 里,"全屏"和"真·全屏"是两回事。

showFullScreen()只是向窗口管理器请求一个全屏状态,在 Windows 下通常能盖住任务栏,但在 GNOME / Wayland / 多屏环境下往往会被系统拦住。

真正覆盖任务栏、Dock、面板(Panel)的做法只有一种思路:绕过窗口装饰协议,用无边框窗口直接占据屏幕原生分辨率

本文总结 Qt Widgets / QWindow 下稳定可用的"真全屏"写法,以及 geometry / availableGeometry / showFullScreen背后的平台差异坑。


一、目标定义先说清

"全屏并覆盖任务栏" ≠ showFullScreen() 的默认行为

方式 是否盖任务栏
showFullScreen() 不一定(Windows 会盖,部分桌面 / Wayland 不盖)
showMaximized() 不盖
setGeometry(screen->geometry()) 有时被 WM 限制
无边框 + native geometry 稳盖

二、覆盖Windows任务栏的推荐写法(先show再setGeometry)

最稳方案:无边框 + 原生屏幕 geometry

Qt Widgets(最常用)

复制代码
#include <QScreen>
#include <QGuiApplication>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint)
{
    setAttribute(Qt::WA_NativeWindow);
}

void MainWindow::showEvent(QShowEvent *event)
{
    QMainWindow::showEvent(event);

    auto screen = QGuiApplication::primaryScreen();
    if (screen)
        setGeometry(screen->geometry());
}

关键点

  • Qt::FramelessWindowHint(让 WM 允许盖任务栏)

  • screen->geometry()(不是 availableGeometry()

  • showEvent 里设 geometry​ (show 前设会被 WM 覆盖)

软件运行截图


一行版(简单窗口 / QWidget)

复制代码
setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
show();
setGeometry(QGuiApplication::primaryScreen()->geometry());

三、Qt 6 / QWindow

复制代码
window->setFlags(Qt::FramelessWindowHint);
window->show();
window->setGeometry(QGuiApplication::primaryScreen()->geometry());

四、真·Kiosk / 工控模式(Windows 下最强)

Windows + Qt Widgets(100% 盖任务栏)

复制代码
setWindowFlags(
    Qt::Window |
    Qt::FramelessWindowHint |
    Qt::WindowStaysOnTopHint
);

show();
setGeometry(QGuiApplication::primaryScreen()->geometry());

WindowStaysOnTopHint

  • 任务栏点不了

  • Win + D 也弹不走(合规风险注意)


五、showFullScreen() 为什么"不一定"盖任务栏?

复制代码
showFullScreen();

内部其实是:

复制代码
setWindowState(Qt::WindowFullScreen);

平台差异表

平台 行为
Windows ✅ 盖任务栏
macOS ✅ 盖 Dock / menu bar
X11 / KDE
Wayland 由 compositor 决定(很多不盖)
GNOME Shell 只给你"最大化 workspace"

Wayland / Linux 桌面:Qt 说了不算


六、多屏:盖指定屏幕(不是主屏)

复制代码
auto screens = QGuiApplication::screens();
if (screens.size() > 1) {
    auto target = screens[1];
    setGeometry(target->geometry());
}

多屏 + Windows:

  • 一定要用 screen->geometry()

  • 不要 virtualDesktop()自己算(Qt 会帮你拼)


七、常见错误

1.用 availableGeometry

复制代码
setGeometry(screen->availableGeometry()); // 永远留任务栏

2.show() 前 setGeometry(Windows)

复制代码
setGeometry(...);
show();   // WM 会修正你

正确顺序:

复制代码
show();
setGeometry(...);

或重写 showEvent()


八、终极推荐模板

复制代码
void initFullscreenKiosk(QWidget *w)
{
    w->setWindowFlags(
        Qt::Window |
        Qt::FramelessWindowHint |
        Qt::WindowStaysOnTopHint
    );
    w->show();

    auto screen = QGuiApplication::primaryScreen();
    if (screen)
        w->setGeometry(screen->geometry());
}

九、一句话总结

Qt 想"全屏不盖任务栏"用 showMaximized()

想"全屏并覆盖任务栏"用 FramelessWindowHint + setGeometry(screen->geometry())

showFullScreen()是请求,无边框 geometry 是命令。

相关推荐
2601_962071571 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
淡海水2 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero3 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-4 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
黑马程序员毕设6 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
_Twink1e6 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
公子小六6 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
问天_观心6 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长6 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
大丑哥7 小时前
QT QML 中实现高亮功能
qt