Как скрыть QWidget под своим родителем? - PullRequest
2 голосов
/ 08 октября 2010

У меня есть модальный 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);
}

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

1 Ответ

0 голосов
/ 08 октября 2010

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

...