c++ - レイアウト - qt widget 重ねる



Qtウィンドウのサイズ変更の問題 (2)

サイズ調整後にQWidgetウィンドウを再描画する際に問題が発生しています。 私はupdate()repaint()adjustSize()が、すべて同じ問題を抱えているようです。ウィンドウの一部だけが再描画され、ウィンドウ枠が下側と右側に表示されません。 ウィンドウも完全にサイズ変更されません。

違いがある場合に備えて、ウィンドウはQMdiAreaます。

ありがとう。

        //  ... some subwidget resizing and moving.
        calibrationWindowUIs[activeWindow].layoutWidget2->move(QPoint(oldXLeft, 30 + height + 21));
        calibrationWindowUIs[activeWindow].layoutWidget1->move(QPoint(oldXRight, 30 + height + 21));

        //  Set window size.
        calibrationWindows[activeWindow]->setMinimumSize(calibrationWindowUIs[activeWindow].tabWidget->geometry().width() + 40, calibrationWindowUIs[activeWindow].tabWidget->geometry().height() + 40);
        calibrationWindows[activeWindow]->update();

注:Qtの初心者です。 おそらく私はレイアウトに何か間違っていますか?

編集:私は十分な情報を与えていない可能性があります。 さて、正直言って、私はまだレイアウトや関連資料を詳しく調べなければなりません。 私がここでやろうとしたことは、ウィンドウをデザインするためにQt Designerを使うことでした。 私は多分愚かな間違いに相当することをした:私は全体のウィンドウの全体的な親のレイアウトを使用しなかったが、私は移動し、個別にサイズを変更する必要がある2つの小さなレイアウトでそれをハックした。 Qtデザイナ画面を参照してください(赤い四角形は唯一のレイアウトです): 。

起こっていることは、右のフレームでは、私は様々な解像度のビデオクリップを再生しているということです。 この解像度に応じてフレームのサイズを変更する必要があります。これは、ボタンとウィンドウがそれに応じて移動/サイズ変更されなければならないことを意味します。 ここではウィンドウのサイズ変更が行われます。私はここでやっているよりも洗練されたソリューションがあると確信していますが、私はここでいくつかの他のシナリオを処理しようとしており、したがってコードの品質が不足しています。

その結果、クリップをロードすると、ウィンドウのサイズが変更されようとしますが、ひどく問題になります。 結果は次のとおりです。

ウィンドウがドラッグされると、正しいサイズにポップされます。 その間に、それはちょうど醜いように見える。

もう一つの質問:Qtデザイナを使ってUIをデザインしていますか? 私は、プログラム的に、あなたはあなたのインターフェイスのより良いコントロールを達成することができますが見つかりました。 デザイナーではできなかったことの1つは、メインウィジェット、つまり以下のコードを持つことと同等のレイアウトを持つことでした。

QVBoxLayout* layout = new QVBoxLayout;
this->setLayout(layout);

デザイナーに配置されたレイアウトは、常にこの 'layoutWidget'サブウィジェットを作成しているように見えます。 その周りには何か?


setMinimumSize()呼び出しています。 それは問題ありませんが、 resize()


私たちはデザイナーとコードを組み合わせてレイアウトを作成していますが、Qtレイアウトシステムは非常に直感的ではありません。 しかし、私はおそらく1つのデザイナーUIファイルの完全なシリーズのレイアウトではないだろう、私は各タブをそれぞれのウィジェットを作成し、コードを介してまたはデザイナーでカスタムクラスに昇進してそれらをアセンブルします。 これにより、すべてのタブのすべての機能を1つのファイルにまとめることで、責任を分けることができます。

ウィジェットにデザイナーの子ウィジェットがある場合、コンテキストメニューからそれを追加することによって、ウィジェットにレイアウトを割り当てることができます。 何も選択されていないことを確認し、レイアウトを作成するウィジェットの背景をクリックし、レイアウトを選択し、すべてのウィジェットにレイアウトが割り当てられます。

レイアウトの階層を作成することは何を助けますか? あなたの最初のスクリーンショットを見ると、私はおそらく、右のアイテムの上と下のスペーサー、ボタンバーの左右のスペーサーを含む水平レイアウト、およびすべてのアイテムのグリッドレイアウトを含む垂直レイアウトを使用します。 スペーサーがなければ、ウィンドウが拡大するとアイテムが拡張されます。 スペーサーを使用すると、サイズ変更時の動作をよりよく制御できます。





window