2009-10-02 4 views
2

Comment puis-je accéder au QTabBar d'un QTabWidget?Accès à l'instance QTabBar

La seule solution que j'ai trouvée est de sous-classer QTabWidget et remplacer le QTabWidget::getTabBar() protégé comme public. Y a-t-il un autre moyen de le faire?

+0

C'est ce que j'ai fait dans l'une de mes applications. Par l'idée publiée, des regards assez froids me suffisent pour tuer une classe de plus. – elcuco

+0

Pourquoi avez-vous besoin d'accéder au TabBar? Cela peut nous aider à vous orienter vers une solution qui correspond à votre problème. –

+0

Je ne veux pas connaître la hauteur de QTabBar à l'exécution – cybevnm

Répondre

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

Il semble que Qt ait un moyen direct de violer les principes d'encapsulation, mais acceptable dans mon cas :) +1, si personne d'autre ne répond, j'accepterai cette réponse. – cybevnm

+1

le seul problème est ... que se passe-t-il si Qt décide de changer le nom de l'objet tabbar? –

+0

AFAIK, les noms étaient définis dans QtDesigner par le développeur (dans le cas où vous créez un gui avec le concepteur) ... – cybevnm

1

Que voulez-vous faire à la barre d'onglets?

Peut ne pas aider, mais avec stylesheets vous pouvez personnaliser les sous-contrôles QTabWidget :: tab et :: tab-bar.

+0

Je ne voulais pas connaître la hauteur de QTabBar au moment de l'exécution. De toute façon, merci pour vos conseils ... – cybevnm

+0

Essayer d'utiliser des feuilles de style pour personnaliser 'QTabWidget :: tab-bar', par exemple pour mettre' border-bottom: 0px; 'ne fonctionne pas. –

4

Comme vous l'avez mentionné, le sous-classement est la solution appropriée car il est protégé. Quelque chose comme ceci:

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

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

Vous pouvez dire concepteur de « promouvoir » votre QTabWiget à un TabWidget alors vous aurez une fonction tabBar() accessible.