仅在 QTabWidget 的活动选项卡上关闭按钮
Posted
技术标签:
【中文标题】仅在 QTabWidget 的活动选项卡上关闭按钮【英文标题】:Close button only on active tab of QTabWidget 【发布时间】:2016-10-03 00:29:02 【问题描述】:为了节省QTabWidget
中的空间,我想仅为当前选项卡显示关闭图标,例如Firefox 正在做:
有没有一种使用样式表的简单方法,比如(不是这样工作)
QTabBar::tab::!selected::close-button visible: false;
还是我必须继承 QTabWidget
才能获得所需的行为?
【问题讨论】:
【参考方案1】:您不需要继承任何东西,您可以使用QTabWidget::tabBar()
方法来获取与您的QTabWidget
关联的标签栏的引用(即QTabBar *
)。 (注意这个方法不再受保护,所以不用子类化也可以访问)
QTabBar *tabBar = tabWidget->tabBar();
您现在可以使用tabBar
引用来隐藏非当前选项卡上的关闭按钮。例如隐藏i
th 按钮,你可以这样做:
tabBar->tabButton(i, QTabBar::RightSide)->hide();
所以一个简单的工作流程可以如下:
将QTabWidget::currentChanged(int index)
信号连接到插槽。
在该插槽中隐藏除index
处的按钮以外的所有关闭按钮。
【讨论】:
谢谢。事实上,我可以让按钮消失。但是,这不会修改选项卡宽度。选项卡中只有一些空白区域:i.imgur.com/7yO4Cmi.png。知道如何回收该空间吗?【参考方案2】:您可以使用受保护的方法QTabWidget::tabBar
子类化QTabWidget
以访问QTabBar
小部件。然后您可以连接到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();
【讨论】:
QTabWidget::tabBar
不再受到保护。
在 Qt 4.8 中是这样的。【参考方案3】:
hide() 为不可见的关闭按钮留下空白空间。这看起来很有趣。 改为将宽度设置为 0。
【讨论】:
以上是关于仅在 QTabWidget 的活动选项卡上关闭按钮的主要内容,如果未能解决你的问题,请参考以下文章