11

QMainWindow複数の を含む がありますQDockWidget。一度に表示できるのは 1 つだけです。私の問題は:

DockWidget を非表示にして別のものを表示すると、QSizePolicys、sizeHint、sizeConstraint を設定しても、新しく表示されるサイズは非表示のサイズと同じになります。新しく表示された を最後のサイズに戻したいのですが、と でQDockWidgetサイズを固定せずに のサイズを変更する方法が見つかりません。setMinimumSizesetMaximumSize

実際には1つの方法がありますが、私はそれが非常に醜いと考えています:

setMinimumWidth(500);
setMaximumWidth(500);
qApp().processEvents();
setMinimumWidth(0);
setMaximumWidth(9999);

もっといい方法があるはず!? 助言がありますか?

4

3 に答える 3

2

ドキュメントから:

QDockWidget は、その子ウィジェットのラッパーとして機能し、setWidget() で設定されます。カスタム サイズのヒント、最小サイズと最大サイズ、およびサイズ ポリシーを子ウィジェットに実装する必要があります。QDockWidget はそれらを尊重し、独自の制約を調整してフレームとタイトルを含めます。QDockWidget 自体にサイズの制約を設定しないでください。ドッキングされているかどうかによってサイズの制約が変わるためです。ドッキングされた QDockWidget にはフレームがなく、タイトル バーが小さくなります。

つまり、DockWidget のサイズを変更する代わりに、子ウィジェットのサイズを変更する必要があります。

于 2013-01-12T20:11:11.467 に答える
1

私はあなたがあなたの質問で提案した解決策を試しました、そしてそれは私のために働きます、しかしウィジェットが余分なペイントサイクルを通過している間醜いフラッシュがあります。より良い方法が見つからなかったので、QtがQDockWidgetのより良いサポートをリリースするまで、今のところそれを使用します。

QDockWidgetAPIにさらに多くの機能が追加されることを期待しています。これは優れたAPIですが、まだ非常に不足している領域がいくつかあります。たとえば、タブ付きのQDockWidgetのインデックスを取得するこの提案された方法(Qt FAQから直接)は面倒でエラーが発生しやすくなります。

于 2013-02-04T00:00:51.990 に答える