我正在创建一个QTabWidget,它有许多标签,每个标签包含不同数量的按钮。因为其中一些选项卡可能包含许多按钮,所以我想让每个选项卡都可滚动。
我有一个实现,但无论我尝试什么我都无法让QTabWidget达到特定的垂直尺寸 - 它总是希望根据其中一个页面使用的最大高度来调整自身的大小。我已经尝试过更改大小政策,布局策略,但没有任何作用。
这是我正在使用的精确小部件结构:
QFrame
QSplitter
QTabWidget
QFrame
我用QWidget实例填充QTabWidget作为页面。这些实例包含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);
BTW,我在Mac OS X 10.8.2上使用Qt 5.0.2。