2009-10-02 106 views
2

如何訪問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

回答

6
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

1

你想對標籤欄做什麼?

可能沒有幫助,但用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

4

正如你所提到的,子類化是適當的解決方案,因爲它是受保護的。事情是這樣的:

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

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

你可以告訴設計師以「推動」你QTabWiget到TabWidget那麼你將有一個可訪問tabBar()功能。