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

时间:2011-09-01 10:25:36

标签: qt overlay taskbar qmainwindow

我正在构建一个没有默认窗口边框的Qt-Application作为无框窗口。 通过在QMainWindow中设置窗口标志来包含窗口函数,如:

    MainDialog::MainDialog(QWidget *parent):
        QMainWindow(parent), currentProject(NULL), currentUser(NULL),
        aViews(new QList<AViewForm*>()),
        bViews(new QList<BViewForm*>()),
        cViews(new QList<CViewForm*>())
    {

        ui.setupUi(this);
        this->statusBar()->showMessage(tr(""));
        this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint |  Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint | Qt::WindowSystemMenuHint);

        ...
     }

MainWindow里面有一个.ui文件,这就是为什么我不能继承QDesktopWidget。 我现在遇到的问题是,当最大化时,Appication覆盖了Windows任务栏。

我现在的问题:有没有找到没有

的OS桌面可用高度的可能性
availableGeometry().height()

- QDesktopWidget的方法?我在文档中找不到任何内容:(

其他人在这里问了一个类似的Question但是使用了QWidget而不是QMainWindow。

对于我的问题提示,我会很高兴

2 个答案:

答案 0 :(得分:4)

正如您所说,您可以使用QDesktopWidget。如果你没有让你的类继承它,你可以在构造函数中创建一个只是为了检索高度:

QDesktopWidget w;
int availableHeight = w.availableGeometry().height();

答案 1 :(得分:3)

猜猜这不是好习惯,但我按照以下方式解决了这个问题:

我构建了一个新类,它需要一个MainWindow作为参数,并带有用于缩放操作的插槽:

FullScreen::FullScreen(QMainWindow &mainWindow, QObject *parent) : QObject(parent), mainWindow(mainWindow)
{
    this->saveCurrentPosition();
}
void FullScreen::maximize()
{
    this->saveCurrentPosition();
     mainWindow.move(QApplication::desktop()->mapToGlobal(QApplication::desktop()->availableGeometry().topLeft()));
     mainWindow.resize(QApplication::desktop()->availableGeometry().size()); 
}

void FullScreen::normalize()
{

    mainWindow.move(lastGlobalPosition);
    mainWindow.resize(lastSize);
}

void FullScreen::saveCurrentPosition()
{
    lastGlobalPosition = mainWindow.mapToGlobal(mainWindow.rect().topLeft());
    lastSize = mainWindow.size();
}

现在唯一出现的问题是当应用程序是全屏并且您移动任务栏时。我没有设置任何resizeEvent