QDialog不以父母为中心

时间:2014-04-24 14:10:44

标签: qt5 qdialog

我知道QDialog应该默认位于父窗口的中心,但我显然错过了一些微妙之处。我有一个从QWidget派生的对象,我正在尝试使用以下测试代码创建一个以此为中心的子对话框

QDialog *dialog = new QDialog(this);
QPoint dialogPos = dialog->mapToGlobal(dialog->pos());
QPoint thisPos = mapToGlobal(this->pos());
dialog->exec();

当我这样做时,对话框显示在我窗口的左上角。 dialogPos是(0,0),thisPos是(808,371)。

我错过了什么?为什么对话框没有像我期望的那样显示在中心?

2 个答案:

答案 0 :(得分:3)

如何将QDialog集中到它的父QWidget

void Dialog::showEvent( QShowEvent* )
{
    QRect parentRect( parentWidget()->mapToGlobal( QPoint( 0, 0 ) ), 
parentWidget()->size() );
    move( QStyle::alignedRect( Qt::LeftToRight, Qt::AlignCenter, size(), 
parentRect ).topLeft() );
}

答案 1 :(得分:1)

我将QDialog子类化,并将以下代码放在构造函数中。

QPoint dialogCenter = mapToGlobal(rect().center());
QPoint parentWindowCenter = parent->window()->mapToGlobal(
    parent->window()->rect().center());
move(parentWindowCenter - dialogCenter);

之后,对话框在父窗口的中心。我的系统正在运行Qt5.3.1和Ubuntu 14.04。