如何取消选择 QTabBar 中的所有选项卡?

How to deselect all tabs in QTabBar?

有没有办法取消选择 QTabBar 的所有选项卡?在文档中它读起来有些含糊:

The current index is -1 if there is no current tab.

但是将当前索引设置为-1似乎并没有取消选择所有选项卡的效果。

我的用例是我有标签栏驱动的工具栏。我还实现了当再次点击当前标签栏选项卡时所有工具栏都隐藏的功能。但是,我似乎无法获得显示未选择标签的相应视觉效果。

请参阅 Nikolay 的回答以了解(棘手的)解决方法。

恐怕这目前是不可能的。 currentIndex 只有在没有启用的选项卡项时才可能是 -1

虽然文档中没有明确提及,但源码已经很清楚了:

bool validIndex(int index) const { return index >= 0 && index < tabList.count(); }

void QTabBar::setCurrentIndex(int index)
{
    Q_D(QTabBar);
    if (d->dragInProgress && d->pressedIndex != -1)
        return;
    int oldIndex = d->currentIndex;
    if (d->validIndex(index) && d->currentIndex != index) {
        ...
    }
}

一个(棘手的)变通方法可能是禁用所有选项卡项并在用户单击它时再次启用它们。

看来我找到了解决办法。一个看不见的假标签就可以解决问题。在 Linux 和 Mac 上使用 Qt 6.1.3 进行了测试。不确定 Qt5。

const auto fakeTabIndex = tabBar->addTab(QString());
tabBar->setTabVisible(fakeTabIndex, false);
....
tabBar->setCurrentIndex(fakeTabIndex);