2010-12-09 79 views
8

J'utilise l'indicateur de case à cocher QTableView de Qt :: ItemIsUserCheckable pour afficher une case à cocher dans une cellule de tableau. Après avoir lu quelques éléments sur l'alignement pour tenter de centrer la case à cocher dans la cellule, je retourne le Qt :: AlignCenter en tant que TextAlignmentRole de la fonction data() data.Qt QTableView - Alignement de la case à cocher lors de l'utilisation de IsUserCheckable

QVariant ExampleModel::data(const QModelIndex &index, int role) const 
{ 
    if(!index.isValid()) 
    return QVariant(); 

    if (role == Qt::TextAlignmentRole) 
     return Qt::AlignCenter | Qt::AlignVCenter; 
} 

Ceci cependant n'aligne pas ma case à cocher.

Est-ce que quelqu'un sait comment aligner les cases à cocher dans ce mode?

Répondre

3

Après une enquête plus approfondie sur les options de délégués, j'ai trouvé une belle référence (malheureusement plus disponible) et est venu avec l'hybride suivant à l'aide d'un QItemDelegate et IsUserCheckable.

Essentiellement, vous devez étendre QItemDelegate et réimplémenter, en utilisant la fonction drawCheck au centre et utiliser le editorEvent pour gérer les événements de la souris et du clavier lors de la configuration du modèle avec l'état approprié.

void drawCheck(QPainter* painter, QStyleOptionViewItem const& option, QRect const& rect, Qt::CheckState state) const 

et

bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) 

Voir aussi cette question similaire here ...

+0

2 des liens sont brisés –

2

Probablement pas la réponse que vous recherchez, mais j'ai trouvé beaucoup plus facile d'implémenter mon propre délégué d'élément case à cocher lors de l'utilisation de qtableviews.