Qt/win:无框窗口上的 showMaximized() 重叠任务栏

Posted

技术标签:

【中文标题】Qt/win:无框窗口上的 showMaximized() 重叠任务栏【英文标题】:Qt/win: showMaximized() overlapping taskbar on a frameless window 【发布时间】:2010-04-14 21:29:42 【问题描述】:

我正在构建一个具有自己的自定义 chrome 的应用程序。我通过设置标志关闭了默认窗口边框:

this->setWindowFlags(Qt::FramelessWindowHint);

设置此标志并关闭默认窗口边框后,任何调用:

this->showMaximized();

导致窗口占据整个屏幕,与任务栏重叠。我应该调用此方法或其他方法而不是 showMaximized() 是否有常见的解决方法?

Win7/Qt4.6

【问题讨论】:

【参考方案1】:

你不应该从QDesktopWidget继承。

您可以通过从QApplication::desktop 获取QDesktopWidget 实例来获取“可用几何”:

QDesktopWidget *desktop = QApplication::desktop();
// Because reserved space can be on all sides of the scren
// you have to both move and resize the window
this->setGeometry(desktop->availableGeometry());

【讨论】:

【参考方案2】:

如果您从 QDesktopWidget 继承,您将能够使用 availableGeometry(),它根据平台决定可用的内容(例如,不包括 Mac 上的停靠栏和菜单栏)返回屏幕的可用几何图形和索引屏幕OS X 或 Windows 上的任务栏)。

#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui>
class Widget : public QDesktopWidget

    Q_OBJECT
public:
    Widget(QWidget *parent = 0);
    ~Widget();
;

#endif // WIDGET_H



#include "widget.h"
#include <QtGui>

Widget::Widget(QWidget *parent) : QDesktopWidget()

    this->setWindowFlags(Qt::FramelessWindowHint);
    this->showMaximized();
    this->resize(width(), availableGeometry().height());


Widget::~Widget()



【讨论】:

太棒了,这个在我们的buglis上已经有一段时间了:)

以上是关于Qt/win:无框窗口上的 showMaximized() 重叠任务栏的主要内容,如果未能解决你的问题,请参考以下文章

无框 pyqt/qml 窗口

无框窗口出现边框

如何在 Qt 无框窗口中显示 GStreamer 视频?

为啥在调试过程中有时窗口标题为黑色和按钮无框

pyqt5 无法将边框应用于无框窗口

在 qml 中拖动无框窗口“抖动”