Qt/win: showMaximized()让一个无边框窗口覆盖任务栏

8

我正在开发一个拥有自定义Chrome的应用程序。我通过设置以下标志关闭了默认窗口边框:

this->setWindowFlags(Qt::FramelessWindowHint);

设置此标志并关闭默认窗口边框后,任何调用以下内容的操作:
this->showMaximized();

结果在一个覆盖任务栏并占据整个屏幕的窗口中显示。有没有常见的解决方法或者我应该调用showMaximized()之外的其他方法?

Win7/Qt4.6

2个回答

8

不应该从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());

6
如果你继承自QDesktopWidget,你就能够使用availableGeometry()函数,该函数基于平台决定的可用情况(例如在Mac OS X上排除了dock和菜单栏,或在Windows上排除了任务栏),返回屏幕索引为screen的可用几何形状。
#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()
{

}

太好了,我们已经把这个问题放在我们的 bug 列表上很长时间了 :) - atamanroman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接