如何让QWidget(或QDialog)以其父窗口小部件为中心?

时间:2013-08-22 16:19:34

标签: c++ qt

我想让QWidget(或QDialog)以其父窗口小部件为中心。是否真的需要连接到父窗口小部件的信号,还是有更简单的方法(要设置的东西)?

2 个答案:

答案 0 :(得分:5)

我自己解决了这个问题,只是为了回答我自己的问题,如果有人会发现它有用。

将它放在中心位置:

void MyMainWindow::moveEvent(QMoveEvent* event)
{
    const QPoint global = this->mapToGlobal(rect().center());
    waitDialog->move(global.x() - waitDialog->width() / 2, global.y() - waitDialog->height() / 2);
}

...其中waitDialog是我的“等待...”指标的一个实例。这需要覆盖父级的moveEvent方法(此处为MyMainWindow)。

答案 1 :(得分:0)

如果您的QWidget是其父级的同一窗口子级,那么您可以使用适当的设置将其添加到父级的QLayout(例如QBoxLayout或QGridLayout),以使布局居中。

如果它是QDialog(或其他一些QWidget设置为它自己的可单独移动的顶级窗口),那么QLayout方法将不起作用;您可以做的是覆盖父窗口小部件的resizeEvent()方法,以在子对话框上调用setGeometry(),以便在父窗口调整大小时,子对话框的位置和/或大小会更新。您可能还需要覆盖父级顶级窗口的moveEvent()方法,以检测用户何时移动了父窗口,以便您可以移动对话框的位置以匹配该移动。我不是100%确定这是你真正想要的行为,因为通常用户希望能够独立于父窗口移动关于屏幕的对话框。