1

Ubuntu 10.4 で Qt 4.6 を使用する

MainWindow に QGraphicsView 中央ウィジェットがあります。プログラムが新しいレベル (倉庫番ゲーム) に切り替わるたびに、MainWindow をビューの新しいサイズに合わせて調整したいと考えています。メインウィンドウとビューの両方の最大および最小の幅/高さを同じものに設定することでこれを達成しました。これはほとんどの場合うまくいきますが、いくつかの小さなレベルでは、メインウィンドウは 1 次元でのみ縮小し、白い余白が残ります。片側は次のように:

私の倉庫番ゲーム

ビューをクリックするまではそのままで、その時点で MainWindow がビューに縮小されます。その前にキーストロークを入力して、男を動かしたり、他のコマンドを実行したりできます。マージンはそのままです。マウスをクリックして縮小する必要があります。ハック的な修正を思いついた

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

しかし、この問題が他のプラットフォームに存在するかどうかはわかりませんが、これは不十分で、おそらく移植可能ではないようです。何か案は?

4

3 に答える 3

0

次の方法でより良い修正を見つけました。

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

表示されている新しいレベル ビューの x 寸法が前のものと同じで、y 寸法が小さい (またはその逆) 場合、余白が縮小しないことに気付きました。子ウィジェットの高さが変わるか、MainWindow が移動イベントを受け取ります (少なくとも GNOME 2.x では)。MainWindow で activateWindow() と raise() を呼び出すとうまくいくようで、ビューにフォーカスを戻すことができます。

于 2011-06-22T20:31:40.677 に答える
0

resizeまたはsetGeometryメソッドを使用すると、長方形はウィジェットの最小サイズに制限されます。

デフォルトではこれは 0,0 ですが、サイズ変更メソッドが指定されたパラメーターを拒否するように、おそらくレイアウトによってコードで最小サイズを設定している可能性はありますか?

于 2011-06-22T06:38:08.927 に答える
0

MainWindow からのビュー/シーンの構築と設定に使用したすべてのコードを次に示します。

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();

編集:私のプログラムの唯一のレイアウト(私が知っている)は、暗黙的に構築されたMainWindowレイアウトであり、QGraphicsLayoutsなどは使用していません。

于 2011-06-22T07:24:14.250 に答える