1

水平スクロールバーが必要な幅のコンテンツを含む QVBoxLayout があります。コードを使用して、表示可能領域 (実質的にはスクロールバーによるスクロールと同等) を設定できるようにしたいと考えています。

ドキュメンテーションの中には、これを実行できるとは思えません。また、スクロールバーを取得して直接変更する方法を簡単に見つけることもできませんでした。

QVBoxLayout の表示領域をレイアウトのサイズよりも大きいコンテンツで変更するにはどうすればよいですか?

4

1 に答える 1

0

QVBoxLayoutスクロール機能を提供しないため、QScrollAreaおそらく最も簡単な解決策になります(提案されたとおり)。あなたが思っているほど難しいことではないかもしれません。

幸いなことに、スクロール領域はかなり使いやすいです。以下は、水平スクロールバーのあるスクロール領域で別のウィジェットをラップする簡単な例です。

#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    // Force the label to be wide
    QLabel* label = new QLabel("this is a very long label");
    label->setMinimumWidth(300);

    QWidget* widget = new QWidget();
    QVBoxLayout* layout = new QVBoxLayout(widget);
    layout->addWidget(label);

    QScrollArea* scrollArea = new QScrollArea();
    scrollArea->setWidget(widget);

    // Force the scroll area to be smaller
    scrollArea->resize(200, 100);
    scrollArea->show();

    app.exec();
    return 0;
}

スクロール領域で注意が必要なのは、(コンテンツのサイズではなく) サイズを制御することです。これらは固定サイズのヒントを定義するため、デフォルトでは、必要に応じてサイズが変更されない場合があります。外側のスクロール領域のサイズのヒントやサイズ ポリシーによって、レイアウト内でのサイズ変更方法が決まることに注意してください。

于 2012-11-28T06:16:31.713 に答える