QT 窗口设置为全屏时会遮盖底下任务栏的解决办法

QT 窗口设置为全屏时会遮盖底下任务栏的解决办法

起因

最近想让一个窗口show()时默认为全屏,测试时发现,它确实是全屏了,但过于全了,窗口的部分内容,会被windows11底下的任务栏遮住。
代码如下:

	AdminMainWindow::AdminMainWindow(QWidget *parent)
    : QMainWindow{parent}
{
    //全屏
    this->showFullScreen();
    this->setWindowFlags(Qt::Dialog|Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
//······仅展示部分代码
}

情况大概类似于下图:

QQ音乐部分内容被遮住

解决办法

上方我们使用的代码是this->showFullScreen();,但此“showFullScreen”非我们想要的全屏,我们想要的其实是this->showMaximized();
更改后代码如下:

AdminMainWindow::AdminMainWindow(QWidget *parent)
    : QMainWindow{parent}
{
    //全屏
    this->showMaximized();
    this->setWindowFlags(Qt::Dialog|Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
	//······仅展示部分代码
}

运行后,发现就能达到想要的效果了。

在使用 Qt 进行全屏显示时,若希望隐藏任务栏以实现更纯粹的全屏效果,可以结合 Qt窗口标志(`setWindowFlags`)以及 Windows 平台特定的 API 来控制任务栏的行为。以下是一些关键方法和注意事项: ### 设置窗口全屏隐藏任务栏 1. **设置窗口标志为 `Qt::Window` 并移除边框和标题栏** 通过设置窗口标志,可以去除窗口的装饰元素,使窗口更贴近屏幕边缘,避免被任务栏遮挡: ```cpp this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint); ``` 2. **调用 `showFullScreen()` 实现全屏显示** 该方法会将窗口扩展到整个屏幕,但默认情况下不会自动隐藏任务栏。在 Windows 系统中,任务栏通常不会自动隐藏,除非系统设置中启用了相关选项。 3. **通过 Windows API 隐藏任务栏** 如果希望在全屏时主动隐藏任务栏,可以调用 Windows API 函数 `FindWindow` 和 `ShowWindow` 来操作任务栏窗口: ```cpp #include <windows.h> // 隐藏任务栏 HWND hwnd = FindWindow(L"Shell_TrayWnd", NULL); if (hwnd != NULL) { ShowWindow(hwnd, SW_HIDE); } ``` 在窗口退出全屏或关闭时,可以恢复任务栏的显示: ```cpp // 恢复任务栏显示 if (hwnd != NULL) { ShowWindow(hwnd, SW_SHOW); } ``` 4. **处理窗口状态变化事件** 如果窗口从最小化恢复时需要重新进入全屏状态并隐藏任务栏,可以重写 `showEvent` 方法[^2]: ```cpp void MyWindow::showEvent(QShowEvent* event) { if (isMinimized()) { showFullScreen(); // 可选:再次隐藏任务栏 } QMainWindow::showEvent(event); } ``` ### 注意事项 - 使用 Windows API 会降低程序的跨平台兼容性,因此在多平台项目中需谨慎使用。 - 在某些系统设置下,任务栏可能不会自动隐藏,即使调用了 `showFullScreen()`。 - 某些版本的 Windows(如 Windows 11)对任务栏的行为有新的限制,可能需要额外处理。 ### 示例代码整合 ```cpp #include <QMainWindow> #include <windows.h> class MyFullScreenWindow : public QMainWindow { Q_OBJECT public: MyFullScreenWindow(QWidget* parent = nullptr) : QMainWindow(parent) { // 设置窗口标志 setWindowFlags(Qt::Window | Qt::FramelessWindowHint); // 隐藏任务栏 hideTaskbar(); // 全屏显示 showFullScreen(); } ~MyFullScreenWindow() {} protected: void showEvent(QShowEvent* event) override { if (isMinimized()) { showFullScreen(); hideTaskbar(); } QMainWindow::showEvent(event); } private: void hideTaskbar() { HWND hwnd = FindWindow(L"Shell_TrayWnd", NULL); if (hwnd != NULL) { ShowWindow(hwnd, SW_HIDE); } } void restoreTaskbar() { HWND hwnd = FindWindow(L"Shell_TrayWnd", NULL); if (hwnd != NULL) { ShowWindow(hwnd, SW_SHOW); } } }; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值