2009-06-19 5 views
2

Quelqu'un a-t-il de l'expérience avec des widgets personnalisés et personnalisés dans Qt? (J'utilise Qt 4.5)Styles personnalisés pour les widgets personnalisés dans Qt

Les problèmes ressemble à ceci:

Je veux développer des contrôles personnalisés qui ne sont pas entièrement basées sur des primitives de dessin existants et sous-contrôle. Puisque toute l'application doit être skinnable, je veux me fier aux styles personnalisés, aussi bien sur les feuilles de style.

Ce que je dois configurer pour ces nouveaux contrôles sont les suivants:

  • métriques supplémentaires
  • entrées de palette supplémentaires
  • options de style supplémentaires

Creuser sur Internet et de la documentation, je a découvert que je devais dériver une nouvelle classe de style d'une des sous-classes QStyle, et remplacer la méthode polonaise pour ajouter de nouvelles entrées de palette, et drawControl (et les autres méthodes de dessin) pour la logique de peinture pour le contrôle personnalisé et les pièces personnalisées.

J'ai deux questions qui me dérangent:

  1. Actuellement, il existe différentes classes de style pour différents styles, déjà mis en œuvre dans Qt. (par exemple QMotifStyle, QWindowsStyle), chacun avec des réglages différents. Grâce à l'héritage, je devrais ré-implémenter la peinture et la logique d'installation supplémentaire pour chaque style, afin de bien s'intégrer dans tous ces styles. Est-ce que j'ai une autre alternative?

  2. Je ne comprends toujours pas comment les feuilles de style peuvent être utilisées avec ces styles personnalisés. Quelqu'un peut-il pointer vers un endroit où je peux trouver plus d'informations que celui fourni par la documentation Qt? (Les échantillons en Qt ne m'aident pas trop).

+1

JFYI, c'est écrit Qt, pas QT. –

Répondre

2

Le problème de feuille de style ne sera pas résolu, car il ne sera pas sur les classes personnalisées.

Les bonus ajoutés à un style personnalisé ne seront pas compris et pris en compte par les classes déjà existantes. C'est parce que C++ est un langage statique et qu'il n'y a pas de façon (propre et saine) de corriger les classes d'exécution. Une solution possible consiste à utiliser un style de proxy qui enveloppe une certaine instance de sous-classes QStyle standard. En fonction de ce que vous voulez réaliser avec, vous pouvez vous référer à deux articles: Cross-platform code and styles et Look 'n' Feel Q & A.

Si je vous, je ne serais pas aller avec l'approche QStyle. Après tout, vous créez des widgets personnalisés (par exemple, FooSomething) de sorte que vous pouvez également ajouter des styles personnalisés complètement différents (par exemple FooStyle), il n'a même pas besoin d'imiter QStyle. Bien sûr, vous devez toujours répliquer des fonctionnalités similaires, par ex. pour supporter la feuille de style.

1
  1. Une alternative pourrait être d'utiliser QPalette pour obtenir les bonnes couleurs et QStyle pour obtenir l'espacement correct.

  2. QStyle's documentation pour Qt 4.5:

    Attention: feuilles de style Qt sont actuellement pas pris en charge pour sous-classes QStyle personnalisé. Nous prévoyons d'aborder cette question dans une prochaine version.

+0

Néanmoins, le problème 1 n'est pas résolu: je veux ajouter une logique de peinture pour les nouvelles pièces, les sous-contrôles et les contrôles personnalisés, et j'aimerais ne pas l'ajouter pour chaque sous-classe de style. –

Questions connexes