2

为了节省空间QTabWidget,我想只为当前选项卡显示关闭图标,例如 Firefox 正在做的事情:

在此处输入图像描述

有没有一种使用样式表的简单方法,比如(不是这样工作)

QTabBar::tab::!selected::close-button {visible: false;}

还是我必须进行子类QTabWidget化才能获得所需的行为?

4

3 回答 3

2

您不需要对任何东西进行子类化,您可以使用QTabWidget::tabBar()方法来获取QTabBar *与您的QTabWidget. (注意这个方法不再是protected,所以不用子类化也可以访问)

QTabBar *tabBar = tabWidget->tabBar();

您现在可以使用tabBar参考隐藏非当前选项卡上的关闭按钮。例如要隐藏i按钮,您可以执行以下操作:

tabBar->tabButton(i, QTabBar::RightSide)->hide();

所以一个简单的工作流程可能如下:

  • 将信号连接QTabWidget::currentChanged(int index)到插槽。
  • 在该插槽中隐藏除按钮之外的所有关闭按钮index
于 2016-10-03T09:07:39.443 回答
0

hide() 为不可见的关闭按钮留下空白空间。这看起来很有趣。改为将宽度设置为 0。

于 2021-10-14T12:38:38.447 回答
0

您可以使用受保护的方法进行子类QTabWidget化以访问小部件。然后您可以连接到信号并手动隐藏未选择选项卡的关闭按钮:QTabBarQTabWidget::tabBarQTabBar::currentChanged

QTabBar::ButtonPosition closeSide =
        (QTabBar::ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this);

for (int i = 0; i < toolbar->count(); ++i)
{
    if (i != toolbar->currentIndex())
    {
        QWidget *w = toolbar->tabButton(i, closeSide);
        w->hide();
    }
}
于 2016-10-03T07:20:48.280 回答