2010-10-08 10 views
2

J'ai un QDialog modal, qui sur un clic d'un bouton glisse un enfant modèle QDialog hors d'en dessous. Le problème que j'ai est que l'enfant reste au-dessus de son parent pendant l'animation.Comment cacher un QWidget sous son parent?

Je pense que je pourrais m'en sortir en appliquant un masque sur la partie de l'enfant qui chevauche le parent, mais il me semble qu'il me manque une façon plus évidente de placer l'enfant sous le parent.

J'utilise Qt 4.5. Voici quelques exemples de code:

void MainWindow::on_myMenu_triggered() 
{ 
    parentDlg = new QDialog(this); 
    parentDlg->setFixedSize(250, 250); 
    parentDlg->setModal(true); 
    parentDlg->show(); 

    childDlg = new QDialog(parentDlg); 
    childDlg->setFixedSize(150, 150); 
    childDlg->show(); 
    QTimeLine* timeLine = new QTimeLine(1000, this); 
    connect(timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(childDlgStepChanged(qreal))); 
    timeLine->start(); 
} 

void MainWindow::childDlgStepChanged(qreal) 
{ 
    int parentX = parentDlg->frameGeometry().x(); 
    int parentY = parentDlg->geometry().y(); 

    // Move the child dialog to the left of its parent. 
    childDlg->move(parentX - 150 * step, parentY); 
} 

Merci d'avance.

Répondre

0

Les widgets enfants sont toujours rendus sur le parent. Vous devez donc rompre cette relation pour obtenir l'effet recherché directement. Vous pouvez ensuite utiliser raise() ou lower() si les deux dialogues ont le même parent.

+0

Merci, je n'avais pas envisagé de me reparer. J'ai rencontré des problèmes lorsque j'ai essayé de rétablir la boîte de dialogue des enfants animés dans la boîte de dialogue des parents à la fin de la timeline, et j'ai fini par créer une nouvelle boîte de dialogue enfant et détruire la boîte de dialogue enfant utilisée pour l'animation. – Robin

Questions connexes