多数のタブがあり、各タブに異なる数のプッシュ ボタンが含まれる 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 を使用しています。