2010-01-25 6 views
0

J'utilise un petit écran noir et blanc et j'ai besoin que la barre de défilement soit juste un curseur noir dans un cadre externe noir. J'ai obtenu ce que je voulais en utilisant des feuilles de style, mais les inclure dans la configuration lors de l'installation prend trop de place, donc je ne peux pas les utiliser. Est-il possible de supprimer les flèches en héritant de QStyle ou quelque chose? grâceSuppression des flèches de la barre de défilement dans Qt

+0

Vous dites que vous ne pouvez pas configurer Qt pour inclure la feuille de style. Pour moi, cela se lit embarqué. Quelles exigences avez-vous sur le curseur? Besoin d'être utilisable par la souris? Par clavier? Du tout (seulement des fentes)? – e8johan

+0

Oui, c'est pour une utilisation intégrée. La seule façon d'effectuer la barre de défilement est avec les boutons haut et bas que je vais obtenir en tant qu'événements à partir d'un filtre d'événements. – Ayeayeron

Répondre

1

Vous devez créer une sous-classe d'un QStyle (ou une sous-classe comme QCommonStyle) et réimplémenter sa fonction drawComplexControl() pour peindre l'élément CC_ScrollBar par vous-même.

Lisez la documentation de QStyle pour plus d'informations.

+1

Une alternative sur les mêmes lignes est d'hériter et de remplacer les tailles des éléments du contrôle complexe, de sorte que la taille des flèches est vide, et la taille de la barre de défilement est étendue pour remplir où les flèches auraient été. Ensuite, laissez le style dessiner les composants lui-même. –

+0

Oh, belle solution en effet. Si cela fonctionne, c'est beaucoup plus simple que de réimplémenter les fonctions de dessin :) – dimsuz

+0

Merci à vous deux, je l'ai eu avec votre aide. J'ai fini par devoir calculer où le curseur devrait être dessiné (dans drawcontrol) après qu'il ait été augmenté en longueur, basé sur sa position originale quand les flèches étaient là. Autant que j'ai pu trouver qu'il n'était pas possible de modifier la taille des éléments du contrôle complexe, cela aurait été bien. – Ayeayeron

0

Cela pourrait être une réponse stupide, mais serait-il utile si vous venez de spécifier la feuille de style lui-même dans le code comme argument QString à setStyleSheet plutôt que de maintenir un fichier séparé pour elle?

+0

Pour utiliser setStyleSheet Qt doit toujours être configuré pour inclure la feuille de style que je ne peux pas faire. – Ayeayeron

+0

Ah d'accord, je n'avais pas réalisé que vous vouliez dire la configuration de Qt. En fait, je n'ai même pas réalisé qu'ils étaient une option de configuration dans QT ...;) – Troubadour

0

Vous pouvez essayer de changer les paramètres de la palette pour votre barre de défilement (selon la couleur de la barre de défilement de la barre de défilement du designer est la couleur du "texte du bouton") ... Plus d'approche "lourde", est héritée à partir du widget barre de défilement et réimplement de la méthode de peinture, mais il y a il ressemble à une surpuissance ...
Donc, vous devez choisir petit hack vs overkill :). Bien qu'il existe peut-être une autre solution

Questions connexes