Question

J'ai une sous-classe de QTreeView (et sous-classe QAbstractItemModel) qui a une belle tête horizontale. Je voudrais ajouter des en-têtes verticaux (en descendant du côté gauche) pour correspondre. Mais contrairement à ce qui a QTableView vertical séparé ( setVerticalHeader() ) et en-têtes horizontales ( setHorizontalHeader() ), QTreeView permet seulement un en-tête unique ( setHeader() ).

Je sais que je peux juste faire semblant que la colonne gauche est l'en-tête et le rendre avec une couleur de fond différente (je ne ai pas besoin la possibilité de redimensionner ou réorganiser les lignes, donc je ne voudrais pas avoir à mettre en œuvre l'une des ces comportements spéciaux). Mais cela ne tient pas compte des styles locaux. Par exemple, sur mon système les en-têtes ont un léger gradient, en leur donnant un regard presque 3D.

Je suis donc à la recherche soit un moyen d'ajouter un en-tête verticale correcte (je suppose que ce serait une sous-classe de QHeaderView) ou de rendre encore un en-tête en bas de la colonne de gauche, mais le rendu de la bonne façon.

Était-ce utile?

La solution

Votre probablement raison que vous devez « faire semblant », mais vous devriez être en mesure de tirer à aussi bon que vos en-têtes horizontales.

Ce que vous devez faire est d'être responsable de la paintEvent pour les cellules puis utiliser le style actuel pour dessiner un contrôle personnalisé. Quelque chose comme:

//QWidget* w is the widget who's style you want
QPainter painter(this);
QStyleOptionHeader opt;
opt.initFrom(this);
opt.state = QStyle::State_None;
opt.orientation = Qt::Vertical;
opt.state |= QStyle::State_Vertical;
if (w->isEnabled())
    opt.state |= QStyle::State_Enabled;
opt.state |= QStyle::State_Active;
w->style()->drawControl(QStyle::CE_Header, &opt, &painter, w);

La meilleure façon d'être responsable d'un événement de peinture pour les cellules que vous souhaitez serait de créer un délégué d'élément personnalisé et réimplémenter la méthode virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const = 0. Vous venez porte votre peinture aux indices que vous aimez et passer le reste à la super classe (voir les docs de Qt pour cette classe).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top