我想保持QWidget(或QDialog)居中其父窗口小部件。是否真的需要连接到父窗口小部件的信号,还是有一个更简单的方法(设置的东西)?如何保持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%确定这是你真正想要的行为,因为通常用户希望能够独立于其父窗口移动关于屏幕的对话框。
父窗口是主窗口或tabwidget,保持居中的窗口小部件是无法添加到父窗口的qdialog/qwidget(调整大小不解决使用标题栏移动窗口的问题,还是不解决?) – Beachwalker
不清楚“使用标题栏移动窗口的问题”是指用户在父窗口的标题栏上拖动,还是在子对话框的标题栏。如果是前者,则覆盖父窗口的moveEvent()应该可以工作。如果是后者,你可能只想完全摆脱对话框的标题栏,例如通过在显示它之前调用setWindowFlags(Qt :: Popup)或setWindowFlags(Qt :: FramelessWindowHint)。 –
它是父窗口的标题栏 – Beachwalker
- 1. 父窗口小部件如何定位其子窗口小部件?
- 2. QWidget保持在父QWidget
- 3. 如何清除父窗口小部件中的所有窗口小部件?
- 4. 如何在窗口大小调整时保持元素居中
- 5. Qt加载消息应该保持在父窗口部件的顶部并且居中居中
- 6. 从QDialog窗口打开Python PyQt4新的QWidget窗口
- 7. 当调整父窗口小部件时保持纵横比调整子窗口小部件
- 8. 将子窗口保持在其父窗口的视觉上
- 9. 用作窗口时QWidget大小如何?
- 10. 没有布局的父窗口小部件上的中心窗口小部件
- 11. 缩小父窗口,而不是其他窗口小部件增长
- 12. 保持浮动div居中在窗口调整大小css
- 13. 如何添加复合窗口小部件:这个窗口小部件的父窗口没有实现HasWidgets
- 14. PyQt - 调整父级窗口小部件的子窗口大小
- 15. 保持元素垂直居中与负的顶部,而调整窗口大小
- 16. android如何在父窗口的全部宽度内居中TextView?
- 17. 如何保持窗口顶部
- 18. 如何在窗口中调整窗口小部件的大小
- 19. 如何在PyQT中检测父窗口小部件?
- 20. 将子窗口小部件的关键事件重定向到其父窗口小部件
- 21. QGridLayout中窗口小部件之间的间距如何在窗口大小上保持不变?
- 22. 如何禁用父窗口小部件中的所有用户输入窗口小部件(按钮,条目..)?
- 23. 保持窗口顶部WPF
- 24. 如何保持其他窗口的任务栏底部?
- 25. 如何将事件传递给父窗口小部件
- 26. 如何检测ckeditor窗口或其任何小部件外部的点击?
- 27. 未使用父窗口删除QWidget
- 28. 父窗口小部件中的中心固定大小的GtkDrawingArea小部件
- 29. Qt - 调用窗口小部件父窗口
- 30. QWidget中的QML小部件
你试过了什么?信号与保持小部件居中有什么关系? – pippin1289
尝试覆盖QWidget :: moveEvent,但这迫使我改变父窗口小部件 – Beachwalker