2010-01-09 8 views
1

Par défaut, un QTreeWidget gère la sélection des lignes (lorsque vous cliquez sur une ligne, il met en évidence, lorsque vous cliquez sur une autre ligne, il met en évidence cela et désélectionne la ligne précédente), je ne veux pas cela et Je n'arrive pas à comprendre comment l'éteindre.QTreeWidget désactiver la sélection

Répondre

3

Vous pouvez utiliser setSelectionMode de la classe QAbstractItemView (dont QTreeWidget est hérité de) pour définir aucun mode de sélection sur le composant. Quelque chose comme ça (désolé, le code en C++):

yourtreeView->setSelectionMode(QAbstractItemView::NoSelection); 

Dans ce cas les éléments de ne être sélectionné, mais vous pourrez toujours voir rectangle de focus autour d'eux. Pour corriger cela, vous pouvez configurer votre widget pour ne pas accepter le focus en appelant:

yourtreeView->setFocusPolicy(Qt::NoFocus); 

si votre widget arbre doit accepter le focus, mais ne doit pas être dessiner des rectangles de focus vous pouvez utiliser délégué d'élément personnalisé et supprimer State_HasFocus état de l'élément de état avant de le dessiner. Quelque chose comme ceci:

class NoFocusDelegate : public QStyledItemDelegate 
{ 
protected: 
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; 
}; 

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const 
{ 
    QStyleOptionViewItem itemOption(option); 
    if (itemOption.state & QStyle::State_HasFocus) 
     itemOption.state = itemOption.state^QStyle::State_HasFocus; 
    QStyledItemDelegate::paint(painter, itemOption, index); 
} 

.... 

NoFocusDelegate* delegate = new NoFocusDelegate(); 
yourtreeView->setItemDelegate(delegate); 
+0

Merci beaucoup, je me suis perdu avec setSelectionModel(), ne pensais pas que je trouverais la réponse dans QAbstractItemView des thats fo sûr, merci Serge. – spearfire

Questions connexes