为了节省空间QTabWidget
,我想只为当前选项卡显示关闭图标,例如 Firefox 正在做的事情:
有没有一种使用样式表的简单方法,比如(不是这样工作)
QTabBar::tab::!selected::close-button {visible: false;}
还是我必须进行子类QTabWidget
化才能获得所需的行为?
为了节省空间QTabWidget
,我想只为当前选项卡显示关闭图标,例如 Firefox 正在做的事情:
有没有一种使用样式表的简单方法,比如(不是这样工作)
QTabBar::tab::!selected::close-button {visible: false;}
还是我必须进行子类QTabWidget
化才能获得所需的行为?
您不需要对任何东西进行子类化,您可以使用QTabWidget::tabBar()
方法来获取QTabBar *
与您的QTabWidget
. (注意这个方法不再是protected,所以不用子类化也可以访问)
QTabBar *tabBar = tabWidget->tabBar();
您现在可以使用tabBar
参考隐藏非当前选项卡上的关闭按钮。例如要隐藏i
按钮,您可以执行以下操作:
tabBar->tabButton(i, QTabBar::RightSide)->hide();
所以一个简单的工作流程可能如下:
QTabWidget::currentChanged(int index)
到插槽。index
。hide() 为不可见的关闭按钮留下空白空间。这看起来很有趣。改为将宽度设置为 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();
}
}