Как скрыть QWidget под его родителем?

У меня есть модальный QDialog, который одним нажатием кнопки выдвигает из-под него немодальный дочерний QDialog. У меня проблема в том, что ребенок остается поверх своего родителя во время анимации.

Я думаю, что мог бы сойти с рук, применяя маску к той части дочернего элемента, которая перекрывает родителя, но мне кажется, что мне не хватает более очевидного способа просто разместить дочерний элемент под родителем.

Я использую Qt 4.5. Вот пример кода:

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

Заранее спасибо.


person Robin    schedule 08.10.2010    source источник


Ответы (1)


Дочерние виджеты всегда отображаются поверх родительского, поэтому вам придется разорвать эту связь, чтобы добиться эффекта, который вы ищете напрямую. Затем вы можете использовать повышения() или ниже(), если оба диалога имеют один и тот же родитель.

person Arnold Spence    schedule 08.10.2010
comment
Спасибо, я не думала о переродительстве. Я столкнулся с проблемами, когда попытался преобразовать анимированный дочерний диалог обратно в родительский диалог в конце временной шкалы, и в итоге просто создал новый дочерний диалог и уничтожил дочерний диалог, который использовался для анимации. - person Robin; 08.10.2010