Qt4在QTabBar中展开标签

时间:2011-02-27 14:51:43

标签: qt qt4 qtabwidget qt4.6 qtabbar

我正在对QTabWidget进行子类化以添加QTabBar,其标签会延伸到tabBar的整个宽度。因此我将扩展属性设置为true。这似乎没有改变选项卡的行为。

有没有人遇到同样的问题?我将Qt 4.6与

结合使用
TabWidget::TabWidget(QWidget *parent)
{
    tabBar = new QTabBar(this);
    tabBar->setIconSize(QSize(160,160));
    tabBar->setExpanding(true);
    setTabBar(tabBar);
}

编辑:已经解决,以下是我实施的方式,万一有人感兴趣:

    tabBar = new QTabBar(this);
    tabBar->setExpanding(true);
    layout = new QVBoxLayout(this);
    setLayout(layout);
    stackedLayout = new QStackedLayout();
    layout->addWidget(tabBar);
    layout->addLayout(stackedLayout);
    connect(tabBar, SIGNAL(currentChanged(int)), stackedLayout, SLOT(setCurrentIndex(int)));

void MainWindow::addTab(QWidget *widget, const QIcon &icon, const QString &label) {
    tabBar->addTab(icon, label);
    stackedLayout->addWidget(widget);
}

3 个答案:

答案 0 :(得分:3)

来自QTabBar源代码:

// ... Since we don't set
// a maximum size, tabs will EXPAND to fill up the empty space.
// Since tab widget is rather *ahem* strict about keeping the geometry of the
// tab bar to its absolute minimum, this won't bleed through, but will show up
// if you use tab bar on its own (a.k.a. not a bug, but a feature).

要解决这个"功能",您可以使用QTabBar创建一个自己的标签窗口小部件。{/ 1}}。

答案 1 :(得分:1)

5.2.0以后

QTabWidget::tab-bar {
   min-width: 999999px;
}

它会起作用。无需使用任何组合。您可以使用QTabWidget。 Daniel ans是对的。

答案 2 :(得分:0)

@baysmith's answer为基础,强制QTabWidgetQTabBar扩展的更简单方法是在QTabWidget上设置一个样式表,如下所示:

QTabWidget::tab-bar {
    width: 999999px;
}

或者另一个可笑的大数字。如果您的QTabWidget标签垂直而不是水平,请改为使用'height':

QTabWidget::tab-bar {
    height: 999999px;
}

对于我来说,使用Qt 5.0.1这似乎很好。标签展开以填充空间,每个标签获得相等的部分。然而,似乎他们故意为另外一个标签留下足够的空白空间,无论如何。但是剩余的空间是按照需要填充的。可能会为撕裂/滚动按钮保留空白空间,因为添加了太多标签 - 但我不确定。