我知道QDialog应该默认位于父窗口的中心,但我显然缺少一些微妙之处。我有一个从QWidget派生的对象,并试图使用以下测试代码创建一个以该对象为中心的子对话框
QDialog *dialog = new QDialog(this);
QPoint dialogPos = dialog->mapToGlobal(dialog->pos());
QPoint thisPos = mapToGlobal(this->pos());
dialog->exec();
当我这样做时,对话框显示在我的窗口的左上角。dialogPos为(0,0),thisPos为(808371)。
我错过了什么?为什么对话框没有像我预期的那样居中显示?
如何将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() );
}
我对一个QDialog进行了子类化,并将以下代码放入构造函数中。
QPoint dialogCenter = mapToGlobal(rect().center());
QPoint parentWindowCenter = parent->window()->mapToGlobal(
parent->window()->rect().center());
move(parentWindowCenter - dialogCenter);
之后,对话框位于父窗口的中心。我的系统运行的是Qt5.3.1和Ubuntu 14.04。