QTabBar中的Qt4扩展选项卡

Posted

技术标签:

【中文标题】QTabBar中的Qt4扩展选项卡【英文标题】:Qt4 expanding tabs in QTabBar 【发布时间】:2011-02-27 14:51:42 【问题描述】:

我将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);

【问题讨论】:

【参考方案1】:

来自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).

要绕过这个“功能”,您可以在带有QStackedLayout 的小部件上方使用QTabBar 创建自己的标签小部件。

【讨论】:

谢谢,成功了。我想知道,为什么这条信息从未出现在在线文档中。【参考方案2】:

5.2.0 以后

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

它会起作用的。无需使用任何组合。您可以使用 QTabWidget。丹尼尔的回答是正确的。

【讨论】:

【参考方案3】:

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

QTabWidget::tab-bar 
    width: 999999px;

或者另一个非常大的数字。如果您的 QTabWidget 的标签是垂直而不是水平,请改用“高度”:

QTabWidget::tab-bar 
    height: 999999px;

这对我来说似乎工作正常,使用 Qt 5.0.1。选项卡展开以填充空间,每个选项卡都获得相等的部分。但是,无论如何,他们似乎故意为另一个选项卡留出足够的空白空间。但是其余的空间是根据需要填充的。空白空间可能是为撕裂/滚动按钮保留的,以防添加太多标签 - 但我不确定。

【讨论】:

以上是关于QTabBar中的Qt4扩展选项卡的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 width: auto 使选项卡的宽度随文本内部的变化而变化在 Qt5 中的 QTabBar::tab 中?

将背景颜色限制为 QTabBar 上的三角形选项卡

强制 QTabBar 选项卡保持尽可能小并忽略 sizeHint

QTabBar 选项卡大小不随样式表字体缩放

QTabWidget 或 QTabBar 使用 C++ 在不同选项卡中显示相同的 QWidget

如何关闭所有选项卡但在 Qt4(QTabWidget)中处于活动状态