26

アプリケーションを Qt 4.8.4 から Qt 5.2.1 に移植しました。Qt ドキュメントの FlowLayout サンプル コードでFlowLayout提供されているクラスに問題があります。

中央のウィジェットの下部に がドッキングされていますQMainWindowQDockWidgetQDockWidgetは、FlowLayoutいくつかの子ウィジェットがあります。Qt 4.8 では、これは魅力的に機能し、子ウィジェットのサイズはDockWidget. ただし、Qt 5.2 では、DockWidgetはそのサイズを最大にしようとします (中央のウィジェットから取って代わります)。レイアウトを変更すると、この望ましくない動作を防ぐことができます。もちろんFlowLayoutわざと使ってるけど。

問題を説明するために、最小限の例を作成しました。

のコンストラクターDockWidget:

    QGroupBox *generalBox = new QGroupBox("");
    generalBoxLayout = new FlowLayout;
    generalBox->setLayout(generalBoxLayout);

    for(int i=0; i<10; ++i)
    {
        QPushButton *button = new QPushButton("Test", this);
        button->setMinimumWidth(100);
        button->setMinimumHeight(100);
        generalBoxLayout->addWidget(button);
    }

    this->setWidget(generalBox);

誰かが問題の内容と解決方法を知っていますか?

編集 新しい最小限の作業例を作成しましたが、残念ながらQt 4.8とQt 5.2の間の不一致を再現できません。Qt 4.8 でも同じ問題が発生するので、ここで紹介したいと思います。

垂直方向のスペース全体を占有する下部にドッキングされたドックウィジェットを示す初期ビュー: 一番下にドッキングされたドックウィジェットを示す初期ビュー

ドックウィジェットをマウスでリサイズして表示 ドックウィジェットをマウスでリサイズして表示

マウスでメインウィンドウのサイズを変更した後の表示 マウスでメインウィンドウのサイズを変更した後の表示

これらのスクリーンショットは、ドックウィジェットのサイズを手動で変更した後、ドックウィジェットが期待どおりに動作することを示しています。ただし、初期化時に、ウィジェットは使用可能なすべてのスペースを中央のウィジェットから取得しますが、これは望ましくありません。

誰かが解決策/回避策を知っていますか?

4

1 に答える 1

4

これはMarek Rによって与えられた答えです。この質問に答えが得られるように、ここに置きます。あまりにも長い間、それは未回答の質問として偽装されてきました。

私は今問題を見ます。私はいくつかの実験と研究を行いました。Qtのバグのようです。FlowLayout::heightForWidthメインウィンドウのサイズに応じて常に同じwidth値(私の場合は103)で呼び出され、これにより高さが必要以上に大きくなります(通常、ウィンドウははるかに広くなります)。また、メイン ウィンドウの幅が変更されている場合には呼び出されません (ドック領域の高さを更新すると想定されます)。

于 2016-03-16T09:31:12.013 に答える