2011-06-22 41 views
1

在Ubuntu 10.4的QMainWindow - 調整問題的QGraphicsView

使用Qt 4.6我在我的主窗口一個的QGraphicsView中央物件。每當程序切換到新的級別(推箱子游戲)時,我都希望MainWindow調整到視圖的新大小。我主要是通過將主窗口和視圖的最大和最小寬度/高度設置爲相同的東西來實現這一點,並且這在大多數情況下都是有效的,但是在一些較小的層次上,MainWindow只在一個維度收縮,並且留下一個白色邊緣一邊像這樣:

my Sokoban game

它保持這樣直到我認爲,此時主窗口縮小到視圖中單擊。我可以在此之前輸入擊鍵來移動我的球員並執行其他命令,邊距將保持不變,只需點擊一下鼠標就可以縮小它。我想出了一個hackish的修復由

move(geometry().x() + 1, geometry().y()); // force mainWindow to update 
move(geometry().x() - 1, geometry().y()); // hackish but only thing that works 

但這似乎瘸子,最有可能的不可移植的,雖然我不知道在其他平臺上存在此問題。有任何想法嗎?

回答

0

當您使用resizesetGeometry方法時,您的矩形被約束爲小部件的大小minimum

默認情況下,這是0,0,但是有沒有機會在代碼中設置最小尺寸,或者通過佈局,以便resize方法拒絕給定的參數?

0

這裏的一切,我與建築使用的代碼,並建立從主窗口

視圖/場景
m_scene->setSceneRect(-width/2, -height/2, width, height); 

m_view = new QGraphicsView(m_scene); 
m_view->setRenderHint(QPainter::Antialiasing); 
m_view->setResizeAnchor(QGraphicsView::AnchorViewCenter); 
m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
m_view->setFixedWidth(width); 
m_view->setFixedHeight(height); 
setMaximumWidth(width); 
setMinimumWidth(width); 
setMaximumHeight(height); 
setMinimumHeight(height); 
setCentralWidget(m_view); 
m_view->show(); 
move(geometry().x() + 1, geometry().y()); // force mainWindow to update 
move(geometry().x() - 1, geometry().y()); // hackish but only thing that works 
m_view->setFocus(); 

編輯:在我的計劃中唯一的佈局(我知道)是隱式構造的主窗口布局,我沒有使用任何QGraphicsLayouts或類似的東西。

0

我發現由下面的一個更好的解決辦法:

... 
setCentralWidget(m_view); 
m_view->show(); 
activateWindow(); 
raise(); 
m_view->setFocus(); 

我注意到邊緣失敗時被顯示的新的水平視圖具有相同的x尺寸與先前的,收縮但更小的y維度(或反之亦然),所以顯然QMainWindow只在子窗口小部件的寬度和高度發生變化時纔將其大小調整爲其子內容,或者MainWindow接收到移動事件(至少在GNOME 2.x上)。在MainWindow上調用activateWindow()和raise()似乎有訣竅,然後我可以將焦點返回給視圖。

相關問題