2013-06-27 2 views
1

Je travaille sur une application Qt où j'ai un QListView. Il y a peu d'éléments présents dans la liste. Mon application nécessite que les éléments soient réorganisés selon le choix de l'utilisateur. Tout fonctionne bien, mais je suis confronté à un petit problème. Lorsque je fais une sélection multiple en utilisant une souris, c'est-à-dire que je sélectionne des éléments en faisant glisser la souris, elle laisse la marque de sélection sur QlistView même après avoir fait une opération de réarrangement. Je suis sûr que cela a quelque chose à voir avec le nettoyage de la sélection. J'ai essayé d'utiliser repaint() ou clearFocus() mais rien ne semble fonctionner. Par exemple, lorsque nous sélectionnons un groupe de dossiers, nous déplaçons la souris, ce qui nous donne une boîte rectangulaire qui couvre tous les éléments qui se trouvent en dessous. Cette boîte de rectangle particulière reste dans mon QListView. Je ne le veux pas après avoir sélectionné les objets.Comment effacer la sélection de QListView lorsque plusieurs éléments sont sélectionnés?

J'ai un mouseMoveEvent à l'intérieur que je fais:

void BinListView::mouseMoveEvent (QMouseEvent *event) { 

     if (NULL == event) { 
      return; 
     } else { 

      if (Qt::LeftButton & event->buttons()) { 
       int nDis = (event->pos() - m_posStart).manhattanLength(); 

       if (nDis >= QApplication::startDragDistance()) { 
        startDrag (m_posStart); 
       } 
      } 

#ifdef QT_NO_DEBUG 
      QListView::mouseMoveEvent (event); 
      QListView::repaint(); 
      QListView::clearFocus(); 

#endif 

     } 
     repaint(); 
    } 

Si vous remarquez la zone QT_NO_DEBUG, vous verrez mon objectif de compensation et de repeindre, mais rien ne me aide. Toute solution à ce problème?

P.S .: Je l'exécute en mode de libération.

Répondre

1

Utilisez

void QAbstractItemView::clearSelection() [slot] 

pour effacer la sélection

En outre, toutes les vues ont un modèle de sélection, vous pouvez accéder par:

QItemSelectionModel * QAbstractItemView::selectionModel() const 

qui permet de faire beaucoup plus de choses en sélectionnant

Regardez Handling selections in item views

Une autre chose ...

#ifdef QT_NO_DEBUG 

un moyen de libération

#ifndef QT_NO_DEBUG 

serait le mode de mise au point, et je suis sûr, il ne sera pas compiler le code que vous avez collé

+0

Effacer la sélection ne me laisse pas sélectionner les éléments. Mon souci est lorsque je suis en train de faire glisser la souris et en sélectionnant ensemble à des éléments, il laisse la marque de sélection sur la liste. – Gojira

+0

J'ai mal compris. Mais ne semble pas seulement moi. Peut-être que vous devriez reformuler la question. En tout cas. vérifier ces appels de méthodes, je suis sûr que je me trompe – Trompa

+0

J'ai essayé mais ça marche. Par exemple. Lorsque nous sélectionnons un groupe de dossiers, nous faisons glisser notre souris, laquelle interne nous donne une boîte rectangulaire qui couvre tous les éléments qui se trouvent sous elle. Cette boîte de rectangle particulière reste der toujours. Comment puis-je l'effacer? – Gojira

0

Utilisez la fonction QAbstractItemView::clearSelection.

Si vous avez QListView vous pouvez sous-classé simplement l'appeler avec clearSelection();

+0

Merci pour la réponse. Effacer la sélection ne me laissera pas sélectionner les éléments. Mon souci est lorsque je suis en train de faire glisser la souris et en sélectionnant ensemble à des éléments, il laisse la marque de sélection sur la liste. – Gojira

+0

@Gojira Oh désolé, j'ai mal compris la question. Je pensais que vous aviez des problèmes à effacer la sélection. – thuga

+0

@Gojira Au fait, que voulez-vous dire par "marque de sélection"? S'agit-il des éléments sélectionnés en surbrillance ou de la bordure pointillée de l'élément ciblé? Je suis également confondu avec votre appel de fonction 'startDrag'. [Il prend une action drop comme un argument] (https://qt-project.org/doc/qt-4.8/qabstractitemview.html#startDrag), mais vous lui donnez une position? Ou est-ce votre propre fonction? – thuga

Questions connexes