2009-09-28 6 views
1

J'essaie d'utiliser des feuilles de style Qt pour styler une interface utilisateur raisonnablement complexe. Jusqu'à présent, les choses vont assez bien, mais je rencontre une difficulté:Comment déterminer quel widget viser avec des feuilles de style Qt

Comment puis-je déterminer quel nom de widget je devrais cibler pour une partie spécifique d'une interface utilisateur? Par exemple, si je veux changer la taille de la police dans les cellules d'un QTableView, est-ce que j'écris un style qui cible QTableView? ou peut-être QAbstractScrollArea? ou peut-être QAbstractitemDelegate? Comme il s'avère que rien de tout cela ne semble fonctionner - je suppose que cela peut être fait, mais c'est un cas de travailler sur ce que la combinaison magique de widgets est de cibler la bonne partie de l'interface utilisateur.

Le style sheet guide aide un peu, mais semble manquer beaucoup d'informations - l'exemple pour la personnalisation QTableView ne mentionne que la personnalisation de la couleur de fond de la cellule, et ne mentionne pas de changement de couleur de la police, la taille, le visage, les lignes de la grille, etc.

Ai-je raté quelque chose ici? Peut-être que l'utilisation de feuilles de style est la mauvaise façon d'y aller? J'espère que non, puisque l'alternative (dérivant de QStyle) semble beaucoup plus compliquée.

Cheers,

+0

Vous dites donc qu'appeler, par exemple, setStyleSheet ("QTableView {background-color: yellow}") sur votre instance QApplication ne fait rien? Pouvez-vous donner des exemples de ce que vous avez essayé? – Troubadour

+0

Non, désolé - Je dis juste que le fait d'essayer de manipuler certaines propriétés (la taille de la police dans mon cas) ne fait rien lorsqu'il est appliqué à la vue de la table. – Thomi

+0

Pourriez-vous poster votre code? Que se passe-t-il lorsque vous faites quelque chose comme ceci: QTableView { font-size: 12px; couleur de sélection: noir; sélection-couleur de fond: noir; } –

Répondre

3

rendu des éléments dans une vue de l'élément se fait par le délégué. Depuis Qt 4.4, les vues d'élément intégrées utilisent une implémentation déléguée style par défaut (voir blog post), mais il semble que vous souhaitiez plus de contrôle que vous le souhaitez.

Dans ce cas, assurez-vous que votre méthode renvoie des valeurs propres données du modèle() pour l'aspect lié ItemDataRoles (je pense que Qt :: FontRole sera particulièrement intéressant pour vous). Si cela ne suffit pas, ou si ce n'est pas possible, vous devez sous-classer QStyledItemDelegate et réimplémenter sa méthode paint().

Pour les lignes de grille, QTableView a la propriété gridStyle.

+0

Salut, Cet article de blog aide beaucoup cependant, l'exemple qu'ils utilisent change la couleur de l'arrière-plan et la bordure - il me semble impossible de changer la hauteur de la ligne ou la taille de la police. – Thomi

+0

Thomi: Comme je l'ai fait signe dans la réponse, ces choses ne sont pas (autant que je sache) style-able. Assurez-vous que votre modèle renvoie une instance QFont en tant que données pour la propriété FontRole et une instance QSize en tant que données pour SizeHintRole – IgKh

Questions connexes