访问 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->findChild<QTabBar *>(QLatin1String("qt_tabwidget_tabbar")); tabBar->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