仅在QTabWidget的活动选项卡上关闭按钮

时间:2016-10-03 00:29:03

标签: c++ qt qtabwidget qtabbar

为了节省QTabWidget的空间,我想仅显示当前标签的关闭图标,例如Firefox正在做:

enter image description here

是否有使用样式表的简单方法,有些事情(不像这样工作)

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

还是我必须将QTabWidget子类化以获得所需的行为?

2 个答案:

答案 0 :(得分:2)

您不需要对任何内容进行子类化,您可以使用QTabWidget::tabBar()方法获取与QTabBar *相关联的标签栏的引用(即QTabWidget)。 (请注意,此方法不再是 protected ,因此可以在不对类进行子类化的情况下访问它)

QTabBar *tabBar = tabWidget->tabBar();

现在,您可以在非当前标签上使用tabBar引用隐藏关闭按钮。例如,要隐藏i按钮,您可以执行以下操作:

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

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

  • QTabWidget::currentChanged(int index)信号连接到插槽。
  • 在该广告位中隐藏index
  • 按钮以外的所有关闭按钮

答案 1 :(得分:0)

您可以使用受保护的方法QTabWidget继承QTabBar以访问QTabWidget::tabBar窗口小部件。然后,您可以连接到QTabBar::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();
    }
}