设置QTabWidget的初始大小

时间:2013-08-01 20:29:05

标签: qt qt5 qtabwidget qscrollarea

我正在创建一个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。

0 个答案:

没有答案