2009-09-05 116 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函數並在此處進行重新定位窗口。這可能會在用戶真正看到窗戶之前發生,但有時可能會閃爍。