访问 QTabBar 实例

Posted

技术标签:

【中文标题】访问 QTabBar 实例【英文标题】:Accessing the QTabBar instance 【发布时间】:2009-10-02 09:52:28 【问题描述】:

如何访问QTabWidget 的QTabBar?

我找到的唯一解决方案是将QTabWidget 子类化并将受保护的QTabWidget::getTabBar() 覆盖为公共。有没有其他方法可以做到这一点?

【问题讨论】:

这就是我在我的一个应用程序中所做的。通过下面发布的想法看起来很酷,我可以再杀死一个班级。 为什么需要访问TabBar?这可能有助于我们为您提供与您的问题相对应的解决方案。 我不想知道 QTabBar 在运行时的高度 【参考方案1】:
tabBar->findChild<QTabBar *>(QLatin1String("qt_tabwidget_tabbar"));

【讨论】:

看起来 Qt 有直接违反封装原则的方法,但在我的情况下可以接受 :) +1,如果没有其他答案,我会接受这个答案。 唯一的问题是……如果 Qt 决定更改标签栏对象的名称怎么办? AFAIK,名称是由开发人员在 QtDesigner 中定义的(以防您使用设计师创建 gui 时)... @vnm 无法通过设计器访问标签栏小部件,对象名称在Qt源代码中。 谢谢你,我用它来删除某些标签的“关闭标签”按钮,使用:QTabBar *tabBar = tabWidget-&gt;findChild&lt;QTabBar *&gt;(QLatin1String("qt_tabwidget_tabbar")); tabBar-&gt;setTabButton(tabIndex, QTabBar::RightSide, 0); 【参考方案2】:

正如您所提到的,子类化是正确的解决方案,因为它受到保护。像这样的:

class TabWidget : public QTabWidget 
public:
    TabWidget(QWidget *p = 0) : QTabWidget(p)

public:
    QTabBar *tabBar() const  return QTabWidget::tabBar(); 
;

您可以告诉设计师将您的 QTabWiget “提升”为 TabWidget,然后您将拥有一个可访问的 tabBar() 函数。

【讨论】:

【参考方案3】:

你想对标签栏做什么?

可能没有帮助,但使用stylesheets,您可以自定义 QTabWidget 子控件 ::tab 和 ::tab-bar。

【讨论】:

尝试使用样式表自定义QTabWidget::tab-bar,例如设置border-bottom: 0px;不起作用。

以上是关于访问 QTabBar 实例的主要内容,如果未能解决你的问题,请参考以下文章

在拆分的 Widget PyQt Qt 中,将 Tab 从 QtabBar 拖放到其他 QtabBar

QTabBar 滚动条分离

带有不需要的框架的 QTabBar 下的小部件

如何确定一个点是不是在 QTabWidget 的 QTabBar 旁边?

QTabBar 奇怪的行没有消失

如何将 QTabBar 中的图标居中?