août
2007
Bonjour,
Pour des raisons d’accessibilité, il peut être utile de redimmensionner un QScrollBar. Si vous tentez de faire un resize ou un setGeometry sur votre scrollbar, le résultat ne sera pas à la hauteur de vos attentes. Vous aurez au mieux un rectangle noir autour de votre scrollbar mais sa taille sera restée d’origine. La solution est malheureusement plus complexe que cela. Vous devez créer un style et réimplémenter QStyle:: pixelMetric().
La création d’un style n’est pas chose aisée quand on le fait intégralement mais ici, on se contentera d’hériter un style existant. Voici le fichier d’entête du style nommé miniStyle.h
#define MINISTYLE_H
#include <QtGui>
class miniStyle : public QPlastiqueStyle /* on hérite QPlastiqueStyle */
{
Q_OBJECT
public:
miniStyle();
~miniStyle();
/* réimplémentation de pixelMetric */
int pixelMetric ( PixelMetric metric, const QStyleOption * option , const QWidget * widget ) const;
};
#endif
Voici le code du style miniStyle.cpp. Pas besoin de plus
miniStyle::miniStyle()
{
}
miniStyle::~miniStyle()
{
}
int miniStyle::pixelMetric ( PixelMetric metric, const QStyleOption * option, const QWidget * widget ) const
{
switch(metric)
{
case PM_ScrollBarExtent:
return 30; /* on retourne 30 pixels, la largeur du scrollbar */
break;
default: /* le default est obligatoire sinon vous aurez des erreurs comme quoi plusieurs choses ne sont pas traitées. Dans mon application, je n'ai pas besoin de les traiter mais faites attention dans la votre */
return 0;
}
}
Il ne reste plus qu’à appeler le style lors du lancement de l’application. Voici une portion du main.cpp
#include "miniStyle.h"
int main( int argc, char ** argv )
{
QApplication app( argc, argv );
app.setStyle(new miniStyle());
[...]
}
Tous les scrollbars de votre application auront ainsi une largeur de 30 pixels. Il est possible de changer la taille des scrollbars en mettant une variable publique dans votre style qui vous servira à communiquer la taille que vous souhaitez pour votre scrollbar. Il vous suffira de changer sa valeur aux endroits voulus
Cette solution a été réalisée sous Qt 4.2.1 sous Debian Etch.
Bonne programmation !