0

uic によって生成されたコードを使用してウィジェットによって設定された QDialog のインスタンスがあります。ダイアログには垂直に配置されたいくつかのラベルが含まれており、これらのラベルにテキストを表示するために時々ダイアログをポップしています。テキストは複数行にすることができ、その長さは事前に決定されていません。垂直サイズ ポリシーを固定に設定したため、ユーザーはドラッグできません (意味がありません) が、ラベルの現在のサイズに合わせて表示される前に、ダイアログのサイズを変更することも必要です。

この目的のために、表示する前に QDialog で QWidget::adjustSize() を呼び出していましたが、期待どおりに動作しません。ダイアログが表示されると、以前の表示からの (間違った) サイズが保持されているように見えますが、(無効な) 垂直方向のサイズ変更モードでマウスをクリックすると、ダイアログが突然 (正しい) 調整されたサイズに「スナップ」します。

ダイアログを正しく表示する方法はありますか?

編集:私は rubenvb のアドバイスを結び、これで終わった:

QSizePolicy free(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
QSizePolicy fixed(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
dialog->setSizePolicy(free);
dialog->adjustSize();
dialog->setSizePolicy(fixed);
dialog->show();

残念ながら、それは何も変わっていないようでした。

4

2 に答える 2

0

これはあなたが望んでいる答えではなく、あなたがしようとしていることには当てはまらないかもしれませんが、実行時に QWidget のサイズを調整できた唯一の方法は、オブジェクトの resizeEvent(..) メソッド。これにより、使用されているフォント、行数、使用可能なスペースなどに基づいてアイテムのサイズを計算し、それに応じてサイズを調整してから、「イベント」をベースの resizeEvent(..) メソッドに渡すことができました。

私のアプローチでは、ウィンドウ内、ヘッダーの下、フッター ステータス エリアの上、およびメニュー ボタンの列の右に単一の QWidget コンテナーを使用しました。resizeEvent() 呼び出し内のウィジェット コンテナは、表示しようとしているオブジェクトを調べ、使用されているフォントの高さを計算し、寸法に応じていくつかのアイテムのサイズを変更します (スタイル シートがフォントと色をどのように選択したかにより、など)、コンテナ ウィジェットが resizeEvent() メッセージを取得できるようにする前に、サブウィジェットのサイズを調整します。

ウィンドウサイズの設定にはあまり興味がありませんでしたが、コンテナ QWidget も同じように機能するのではないでしょうか? ディスプレイの寸法に応じて、寸法を審美的に満足のいくサイズに設定することにもっと興味がありました。

お役に立てば幸いです。

于 2011-04-25T17:10:00.280 に答える
0

すべてを正しい順序で行います。

  1. ダイアログは表示されません。ダイアログはサイズ変更可能です。

  2. 新しいサイズを計算し、新しいサイズを設定します。

  3. ダイアログをサイズ変更不可に設定します。

  4. ダイアログを表示します。

  5. ダイアログを非表示にし、ステップ 1 に進みます。

于 2011-04-25T17:10:24.017 に答える