如何使QWidget(或QDialog)以其父窗口小部件为中心
How to keep a QWidget (or QDialog) centered to its parent widget?
我想让QWidget(或QDialog)以其父窗口小部件为中心。真的需要连接到父窗口小部件的信号吗?或者有更简单的方法(设置)吗?
我自己解决了这个问题,只是为了回答我自己的问题,如果有人觉得它有帮助的话。
把它放在中心:
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
)。
如果您的QWidget是其父窗口中的子窗口,那么您可以使用适当的设置将其添加到父窗口的QLayout(例如QBoxLayout或QGridLayout)中,使布局居中。
如果它是一个QDialog(或其他设置为自己可单独移动的顶层窗口的QWidget),那么QLayout方法将不起作用;相反,您可以覆盖父窗口小部件的resizeEvent()方法,在子对话框上调用setGeometry(),以便每当父对话框调整大小时,子对话框都会更新其位置和/或大小。您可能还需要覆盖父窗口的顶级窗口的moveEvent()方法,以检测用户何时移动了父窗口,这样您就可以移动对话框的位置以匹配该移动。不过,我不能100%确定这是你真正想要的行为,因为通常用户希望能够独立于其父窗口在屏幕上移动对话框。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- QT-如何通过按下按钮从子窗口小部件返回到父窗口小部件
- 如何将QEvents传递给子窗口小部件
- 如何在子小部件而不是父窗口小部件上绘制一条线
- 如何识别子窗口小部件中的QMouseEvent
- 错误编译QT创建者 / QT窗口小部件示例
- 单击另一个小组件时将窗口小部件标记为未选中
- 在父窗口/小部件类中初始化子小部件的目的是什么?
- 当光标不在窗口小部件上时,QT小部件检测鼠标事件
- 如何在父窗口小部件的右侧绘制
- C++ 创建小部件数组
- 在Qt5中的多个弹出窗口小部件上接收鼠标EnterEvent和LeaveEvent
- 在Qt窗口小部件/QWindow上显示供过于求窗口
- Qt 删除窗口小部件
- 通过按钮访问父窗口小部件的变量
- WinAPI CreateWindow函数创建的窗口比设置的窗口小
- 如何使QWidget(或QDialog)以其父窗口小部件为中心
- 无法对Qt5中的窗口小部件进行聚焦和输入
- 选项卡化所有停靠窗口小部件
- 使用接口类型查找子窗口小部件