2010-04-14 18 views
6

Sto costruendo un'applicazione che ha il proprio chrome personalizzato. Ho girato il bordo della finestra inattiva per default impostando il flag:Qt/win: showMaximized() barra delle applicazioni sovrapposta su una finestra frameless

this->setWindowFlags(Qt::FramelessWindowHint); 

Dopo questo flag è impostato e il bordo della finestra di default è disattivato, tutte le chiamate a:

this->showMaximized(); 

risultato in una finestra che occupa l'intero schermo, sovrapponendo la barra delle applicazioni. C'è un lavoro comune in giro per questo o un altro metodo che dovrei chiamare invece di showMaximized()?

Win7/Qt4.6

risposta

5

Se si eredita dalla QDesktopWidget, devi essere in grado di utilizzare availableGeometry(), che restituisce la geometria a disposizione dello schermo con schermo indice basato su ciò che la piattaforma è disponibile decide (ad esempio, esclude il dock e la barra dei menu su Mac OS X o la barra delle applicazioni su 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() 
{ 

} 
+0

Grande, avuto questo sulle nostre buglis per un bel po ':) – atamanroman

7

Non si deve ereditare da QDesktopWidget.

È possibile ottenere la "geometria disponibile" ottenendo l'istanza QDesktopWidget da QApplication::desktop:

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()); 
Problemi correlati