访问QTabBar实例

问题描述:

如何访问QTabWidgetQTabBar访问QTabBar实例

我发现的唯一解决方案是子类QTabWidget并覆盖公开的受保护的QTabWidget::getTabBar()。有没有其他的方式来做到这一点?

+0

这就是我在我的一个应用程序中所做的。通过张贴波纹管的想法看起来足够酷,我杀了一个班。 – elcuco 2009-10-02 12:05:28

+0

为什么你需要访问TabBar?这可能会帮助我们将您引导至与您的问题相对应的解决方案。 – 2009-10-02 14:04:54

+0

我不想在运行时知道QTabBar的高度 – cybevnm 2009-10-02 14:31:14

tabBar->findChild<QTabBar *>(QLatin1String("qt_tabwidget_tabbar")); 
+0

看起来Qt有直接的方式来违反封装原则,但在我的情况下可以接受:) +1,如果没有其他答案我会接受这个答案。 – cybevnm 2009-10-02 10:45:51

+1

唯一的问题是...如果Qt决定更改tabbar对象的名称,该怎么办? – 2009-10-02 15:55:10

+0

AFAIK,开发人员在QtDesigner中定义了名称(例如,当您使用设计器创建GUI时)... – cybevnm 2009-10-05 08:06:59

你想对标签栏做什么?

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

+0

我不想在运行时知道QTabBar的高度。无论如何,感谢您的建议... – cybevnm 2009-10-02 14:11:10

+0

尝试使用样式表来定制'QTabWidget :: tab-bar',例如设置'border-bottom:0px;'不起作用。 – 2013-04-26 19:36:45

正如你所提到的,子类化是适当的解决方案,因为它是受保护的。事情是这样的:

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

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

你可以告诉设计师以“推动”你QTabWiget到TabWidget那么你将有一个可访问tabBar()功能。