将QMainWindow设置在屏幕中央

时间:2009-09-05 05:20:06

标签: c++ qt

我的QMainWindow包含QGraphicsView,其宽度和高度应该最小。所以,我在QMainWindow构造函数中使用了以下代码:

ui.graphicsView->setMinimumHeight(VIEWWIDTH);
ui.graphicsView->setMinimumWidth(VIEWWIDTH);

然后我使用以下代码在屏幕中央设置QMainWindow

QRect available_geom = QDesktopWidget().availableGeometry();
QRect current_geom = frameGeometry();
setGeometry(available_geom.width() / 2 - current_geom.width() / 2,
            available_geom.height() / 2 - current_geom.height() / 2,
            current_geom.width(),
            current_geom.height());

但它没有设置在屏幕的中心。如果我从setMinimumHeight()省略setMinimumWidth()QGraphicsView,则主窗口将设置在屏幕的中心。如何克服这个问题?我正在使用Qt 4.5.2。

感谢。

1 个答案:

答案 0 :(得分:3)

您遇到的问题是,Qt会尽可能延迟许多计算。设置图形视图的最小宽度和高度时,它会在图形视图所需的窗口需要重新布局的位置设置一个标记。但是,它不会那样做,直到它在屏幕上实际显示之前几毫秒。因此,当您在主窗口上调用rect()时,您将获得旧矩形,而不是新矩形。

我最好的建议是在主窗口中扩展尺寸更改事件,并在该事件中调整定位。您可能还必须在实际显示窗口时进行标记,这样如果用户在显示窗口后调整窗口大小,则不会重新定位窗口。

或者,您可以尝试通过扩展show事件功能并在那里执行来重新定位窗口。它可能会在用户实际看到窗口之前发生,但有时可能会闪烁。

相关问题