33

基本的にQGridLayout、いくつかのウィジェットが含まれています。重要なのは、画面に画像を描画するために使用する2つのラベルです。ユーザーが必要に応じて、受信画像の解像度を変更して、ラベルのサイズを強制的に変更することができます。

ラベルの初期サイズがであると仮定しましょう320x240。ユーザーがVideoModeをに変更する640x480と、ラベルとGUI全体のサイズが完全に変更されます。ただし、ユーザーがに戻ると320x240、ラベルは縮小しますが、レイアウト/ウィンドウは縮小しません。

私はsizePoliciesand sizeHints、andresize(0,0)で遊んだことがありますが、何もうまくいきませんでした。誰かがこれを手伝ってくれませんか?

ここに問題を明確にするためのいくつかのスクリーンショットがあります:

ここでは、すべてが大丈夫です それでも、640x480は完全にサイズ変更されます しかし、ここでは、レイアウトが大きすぎます。

4

4 に答える 4

59

すべてのウィジェットを保持するレイアウトのサイズ制約を「SetFixedSize」に設定する必要があります。その名前は機能するようには聞こえませんが、レイアウトが必要なスペースのみを使用するようにします。2 番目のスクリーンショットのような問題は発生しません。

例:

mainLayout.setSizeConstraint(QLayout::SetFixedSize);
于 2014-01-30T14:13:32.190 に答える
2

レイアウトに変更を適用する前にウィジェットの親ウィンドウの元のサイズを保存し、ユーザーが元のウィンドウに戻ったときに復元する必要があります。

ウィジェットの親サイズではなく、ウィジェットの親ウィンドウサイズを操作する必要があることに注意してください。

レイアウト変更を適用する前にウィジェットで:

minimumWindowSize = this->window().size();

ウィジェットをコンパクトサイズに再編成し終えたら

this->window().resize(minimumWindowSize);
于 2013-02-20T13:19:58.897 に答える
1

それがまさに私がmuプロジェクトでやっていることです。解像度osは関係ありません。あなたの場合は、ビデオまたは画像をレンダリングするためのウィジェットがあれば十分です。

void MainWindow::resizeEvent(QResizeEvent* event)
 {
   QMainWindow::resizeEvent(event);
   if ((player != 0) && ((player->isPlaying()) || player->isLoaded() || player>isLoaded())){
     renderer->resize(ui->mainVideoWidget->width(),ui->mainVideoWidget->height());
     resizeFilter();

 }
}
于 2014-02-18T09:15:02.967 に答える