3 votes

Comment configurer QTreeView pour conserver une sélection multiple lors du déplacement à l'aide des touches fléchées?

Je suis en train d'utiliser QTreeView avec selectionMode défini sur ExtendedSelection. J'aimerais modifier le comportement par défaut qui efface les éléments sélectionnés chaque fois qu'une touche fléchée est utilisée pour changer l'élément actuel (focus).

Est-il possible de le configurer de sorte que lorsque j'utilise une touche fléchée pour naviguer, la sélection reste et seul l'élément actuel (focus) change (de la même manière que cela fonctionne avec Ctrl+Flèche). Fondamentalement, j'aurais besoin d'échanger le comportement de (Flèche vs Ctrl+Flèche), ou simplement d'utiliser un comportement similaire à Ctrl+Flèche même lorsque Ctrl n'est pas enfoncé.

Est-ce possible?

Merci, FipS

2voto

Chris Points 7557

C'est une bonne question, car les fonctions que vous devez utiliser sont un peu obscures. Vous allez devoir sous-classer QTreeView et substituer la fonction keyPressEvent(). Cela devrait vous mettre sur la bonne voie:

class MyTree : public QTreeWidget
{
    Q_OBJECT

    protected:

        void keyPressEvent( QKeyEvent *event )
        {   
            if( event->key() == Qt::Key_Up )
            {   
                selectionModel()->setCurrentIndex( indexAbove(currentIndex()), QItemSelectionModel::NoUpdate );
            }   
            else if( event->key() == Qt::Key_Down )
            {   
                selectionModel()->setCurrentIndex( indexBelow(currentIndex()), QItemSelectionModel::NoUpdate );
            }   
            else
            {   
                QTreeWidget::keyPressEvent( event );
            }   
        }   
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X