I want to keep a QWidget (or QDialog) centered to its parent widget. Is it really required to connect to signals of the parent widget or is there an easier way (something to set)?
问问题
8882 次
2 回答
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
)。
于 2013-08-23T11:20:02.453 回答
0
如果您的 QWidget 是其父级的在同一窗口中的子级,那么您可以使用适当的设置将其添加到父级的 QLayout(例如 QBoxLayout 或 QGridLayout)以使其布局居中。
如果它是一个 QDialog(或其他一些设置为自己的可单独移动的顶级窗口的 QWidget),那么 QLayout 方法将不起作用;您可以做的是覆盖父窗口小部件的 resizeEvent() 方法以在子对话框上调用 setGeometry() ,以便子对话框在父窗口调整大小时更新其位置和/或大小。您可能还需要覆盖父级顶级窗口的 moveEvent() 方法来检测用户何时移动了父级窗口,以便您可以移动对话框的位置以匹配该移动。我不是 100% 确定这是您真正想要的行为,因为通常用户希望能够独立于其父窗口移动有关屏幕的对话框。
于 2013-08-22T16:32:44.110 回答