2

多数のタブがあり、各タブに異なる数のプッシュ ボタンが含まれる QTabWidget を作成しています。これらのタブには多くのプッシュ ボタンが含まれている場合があるため、各タブをスクロール可能にしたいと考えています。

私は、何を試しても、気の毒な QTabWidget を特定の垂直サイズにすることができないことを除いて、その種の動作をする実装を持っています. サイズ ポリシー、レイアウト戦略を変更しようとしましたが、何も機能しません。

これが私が使用している正確なウィジェット構造です:

QFrame
    QSplitter
        QTabWidget
        QFrame

QTabWidget に、ページとして機能する QWidget インスタンスを設定します。これらのインスタンスは QScrollArea でラップされ、QGridLayout を使用して、グリッド内のプッシュ ボタンでタブを設定できるようにします。

タブ ウィジェットに入力する実際のコードは次のとおりです。

for (const std::string &tabName : tabs) {
    // Grid layout for each tab
    QGridLayout *gridLayout = new QGridLayout();

    // The tab widget itself
    QWidget *page = new QWidget(tabWidget);
    page->setLayout(gridLayout);

    // Wrap tab with a scroll area so that it's scrollable when the tab widget
    // is resized to be smaller than the page size
    QScrollArea *scrollArea = new QScrollArea(tabWidget);
    scrollArea->setWidgetResizable(true);
    scrollArea->setWidget(page);

    tabWidget->addTab(scrollArea, tabName.c_str());

    // Populate tab with push buttons
    const std::vector<std::string> &buttons = GetButtons(tabName);
    for (const std::string &buttonName : buttons) {
        QPushButton *button = new QPushButton(buttonName.c_str());
        button->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
        QSize buttonSize(130, 20);
        button->setFixedSize(buttonSize); // <=== this does work
        int row = i / numColumns;
        int col = i % numColumns;
        gridLayout->addWidget(button, row, col, Qt::AlignLeft | Qt::AlignTop);
    }
}

// This does not work
const int fixedVerticalSize = 120;
tabWidget->resize(tabWidget->size().width(), fixedVerticalSize); 

ところで、私は Mac OS X 10.8.2 で Qt 5.0.2 を使用しています。

4

0 に答える 0