2012-12-12 6 views
0

J'ai une fenêtre principale que je centre de cette façon main.cpp:2 QMainWindow collé - Taille de la mise en page

int main(int argc, char *argv[]) 
{  
    QApplication app(argc, argv); 
    QMainWindow *qmain = new QMainWindow; 
    Ui_MainWindow ui; 
    ui.setupUi(qmain); 
    QRect r = qmain->geometry(); 
    r.moveCenter(QApplication::desktop()->availableGeometry().center()); 
    qmain->setGeometry(r); 
    qmain->show(); 
    return app.exec(); 
} 

Dans cette « Qmain » fenêtre principale, je peux créer un autre QMainWindow et j'essaie de faire coller (ou coller je ne sais pas comment dire) les deux fenêtres. En fait, j'aimerais que le coin supérieur droit du premier soit situé en haut à gauche du second. Pour cela, utiliser la fonction de membre de Ui_MainWindow suivant:

void Ui_MainWindow::generate_IC() 
{ 
qmenu = new QMainWindow; 
DiskMenu = new Ui_DiskGalMenu; 
DiskMenu->setupUi(qmenu); 
setInitialDiskMenuPosition(qmenu, this); 
qmenu->show(); 
} 

et setInitialDiskMenuPosition:

void Ui_MainWindow::setInitialDiskMenuPosition(QMainWindow *MainWindow, Ui_MainWindow *parent) 
{ 
     QSize size = parent->widget->size(); 
     QDesktopWidget* desktop = QApplication::desktop(); 
     int width = desktop->width(); 
     int height = desktop->height(); 
     int mw = size.width(); 
     int mh = size.height(); 
     int right = (width/2) + (mw/2); 
     int top = (height/2) - (mh/2); 
     MainWindow->move(right, top); 
} 

Mais le problème est que je ne comprends pas exactement ce que je veux puisque la taille de centralwidget « parent- > widget-> size() "ne renvoie que la taille du widget et non la totalité de la fenêtre parent" qmain ". J'ai donc un léger décalage parce que les frontières de la fenêtre « Qmain » ne sont pas prises en compte comme il est indiqué ci-dessous:

enter image description here

Si je pouvais avoir accès à la taille de l'ensemble fenêtre parent .. .

Si quelqu'un pouvait me aider

Répondre

0

Selon la documentation, vous devez utiliser parent-> widget-> frameGeometry(). la taille() au lieu de parent-> widget-> taille()

+0

Même avec parent-> widget-> frameGeometry(). size(), cela ne fonctionne pas. Je suis sur Debian Squeeze GNU/Linux. – youpilat13

+0

De la documentation: "X11 ne fournit aucun moyen standard ou facile d'obtenir la géométrie de l'image une fois la fenêtre décorée.Qt résout ce problème avec une heuristique astucieuse et un code intelligent qui fonctionne sur un large éventail de gestionnaires de fenêtres qui existent aujourd'hui. surpris si vous trouvez un où QWidget :: frameGeometry() renvoie des résultats erronés. " – PSyton

Questions connexes