2010-12-14 101 views
0

J'utilise un QItemDelegate combiné avec l'indicateur IsUserCheckable de QTableView pour dessiner une colonne centrée sur la case à cocher. Tout a bien fonctionné jusqu'à ce que j'ai activé la sélection de ligne pour la table.Qt: case à cocher & QItemDelegate - ne pas cocher la case lorsque la sélection se produit

Lorsque la sélection se produit, l'arrière-plan de sélection bleu est la seule chose peinte et les cases à cocher ne sont plus visibles.

Ci-dessous est mon code que j'utilise pour peindre la case à cocher dans le délégué.

void CheckboxDelegate::drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const 
{ 
    QSize size = check(option, option.rect, Qt::Checked).size(); 
    QRect checkboxRect = QStyle::alignedRect(option.direction, Qt::AlignCenter, size, option.rect); 
    QItemDelegate::drawCheck(painter, option, checkboxRect, state); 
} 

Avez-vous des idées sur la raison pour laquelle cette fonction ne s'affiche pas correctement lors d'une sélection?

+1

Vous avez vraiment besoin de poster plus de code. Je suppose que votre commande est foiré et que vous peignez le fond bleu ** après ** vous peignez la case – Robert

+0

Ceci est le seul code pertinent qui peint n'importe quoi. J'imagine que le problème est lié à l'ordre de ma peinture comme vous l'avez mentionné, mais je ne sais pas comment mettre en œuvre les mesures appropriées à ce stade. En espérant que quelqu'un peut fournir un peu plus de perspicacité. – cweston

Répondre

0

Il est difficile d'être sûr que ma réponse vous aidera à cause du manque de code affiché, mais je pense que votre problème est que le peintre peint non seulement le QRect, mais aussi le QItemDelegate. Cela signifie qu'à moins que vous ne lui disiez spécifiquement ce que vous voulez que soit la couleur du QRect, il le peindra pour avoir la même couleur que la cellule entière. Si cela est vrai, alors votre QRect est toujours là, mais est simplement de la même couleur que le reste du contenu de la cellule.

Vous pouvez changer la couleur du peintre pour la QRect en faisant painter.setPen(QColor.red);

Encore une fois, je n'ai pas beaucoup de code pour travailler hors de, mais si vous voulez que le chèque soit une couleur différente, vous devez Réglez-le pour avoir une couleur différente.

Si vous fournissez plus de code, je pourrais vous répondre plus clairement.

+0

Bien sûr, je l'ai fait en Java (vous pouvez faire la même chose en C++) – Ryan