Audrey Delany
Audrey Delany

Reputation: 113

Qt/win: showMaximized() overlapping taskbar on a frameless window

I'm building an Qt-Application without the default window border as a frameless window. The window functions are included by setting window flags in the QMainWindow like:

    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);

        ...
     }

The MainWindow has an .ui file within, thats why I cannot inherit from QDesktopWidget. The Problem I have now is that the Appication overlays the windows taskbar when maximizing.

My Question now: is there any posibility to find out the available height of the OS desktop without the

availableGeometry().height()

-Method of QDesktopWidget? I cannot find anything in the documentation :(

Somebody else here asked a similar Question but used a QWidget instead of a QMainWindow.

I would be glad about any hints to my Problem

Upvotes: 4

Views: 2971

Answers (2)

Audrey Delany
Audrey Delany

Reputation: 113

Guess thats not good practise, but i solved it as followed:

I built a new class which needs a MainWindow as param and with slots for the scaling actions:

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();
}

The only Problem which now occures is when the application is fullscreen and you move the taskbar. I have not set any resizeEvent though

Upvotes: 3

KaZ
KaZ

Reputation: 1163

As you say you can use QDesktopWidget. If you don't have your class inherit from it you can create one in your constructor just for retrieving the height :

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

Upvotes: 4

Related Questions