2009-09-05 118 views
1

我的QMainWindow包含QGraphicsView,它应该具有最小的宽度和高度。所以,我用下面的代码在QMainWindow构造:在屏幕中心设置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()); 

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

谢谢。

+0

通常不鼓励手动定位窗口。窗口管理员的工作是定位窗口,如果您的应用程序手动将其自身居中,那将导致不一致。例如,在我的双头系统中,您的代码将放在窗口的哪个位置?除非你有很好的理由,否则不要对窗口进行微观管理。 – 2009-09-08 18:45:48

+0

我见过从屏幕中间开始的软件。看上去不错。 – Donotalo 2009-09-10 06:41:28

回答

2

你遇到的问题是Qt会延迟很多计算,只要它可以。当您设置图形视图的最小宽度和高度时,它会在某处将图形视图所在的窗口设置为需要重新布局的标志。然而,它不会那么做,直到它在屏幕上实际显示几毫秒之前。因此,当您在主窗口上拨打rect()时,您会看到旧的矩形,而不是新的矩形。

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

或者,您可以尝试通过扩展show event函数并在此处进行重新定位窗口。这可能会在用户真正看到窗户之前发生,但有时可能会闪烁。