2013-08-22 100 views

回答

3

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

保持它的中心:

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)。

0

如果您的QWidget是其父窗口的同窗口子窗体,那么您可以将其添加到父窗口的QLayout(例如QBoxLayout或QGridLayout)并进行适当的设置以使其布局居中。如果它是一个QDialog(或其他QWidget被设置为它自己可单独移动的顶层窗口),那么QLayout方法将不起作用;你可以做的是重写父窗口部件的resizeEvent()方法,以便在子对话框中调用setGeometry(),这样子对话框在父窗口调整大小时就可以更新其位置和/或大小。您可能还需要覆盖父级顶层窗口的moveEvent()方法,以检测用户何时移动了父窗口,以便您可以移动对话框的位置以匹配该移动。我不是100%确定这是你真正想要的行为,因为通常用户希望能够独立于其父窗口移动关于屏幕的对话框。

+0

父窗口是主窗口或tabwidget,保持居中的窗口小部件是无法添加到父窗口的qdialog/qwidget(调整大小不解决使用标题栏移动窗口的问题,还是不解决?) – Beachwalker

+1

不清楚“使用标题栏移动窗口的问题”是指用户在父窗口的标题栏上拖动,还是在子对话框的标题栏。如果是前者,则覆盖父窗口的moveEvent()应该可以工作。如果是后者,你可能只想完全摆脱对话框的标题栏,例如通过在显示它之前调用setWindowFlags(Qt :: Popup)或setWindowFlags(Qt :: FramelessWindowHint)。 –

+0

它是父窗口的标题栏 – Beachwalker

相关问题