c++ - QDialog不在 parent 的中心

标签 c++ qt 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)。

我想念什么?为什么对话框没有按我期望的那样居中显示?

最佳答案

如何将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() );
}

关于c++ - QDialog不在 parent 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23271423/

相关文章:

c++ - CMake 中的全程序优化

c++ - 知道为什么这个用户定义的文字会失败吗?

c++ - 如何使用静态成员作为模板参数?

c++ - 当我尝试用 makefile 编译我的 qt 程序时它不起作用

c++ - QT MySql 数据库检查登录名和密码以登录

c++ - Qt QProcess有时能用有时不能用

c++ - 使用 QListWidget 的 Qt 命令日志

c++ - (C++) 在 Windows 中禁用 Alt 命令

c++ - 使流布局适应 Qt 表

c++ - 尽管设置了最小值,QDoubleSpinBox 不允许负值