Seite 1 von 1

QTreeWidget::setCurrentItem ( QTreeWidgetItem * item )

Verfasst: 14. Juni 2011 11:56
von gboelter
Hallo!

Ich versuche gerade in einem simplen QTreeWidget, welches ich mit dem Qt-Designer erzeugt habe, mit

Code: Alles auswählen

treeWidget->setCurrentItem( previous );
auf einen bestimmten Eintrag zu springen. Das klappt auch soweit einwandfrei, nur werden dabei alle Items zwischen dem zuletzt aktiven Item und dem angesprungenen Item markiert, wobei aber offensichtlich nur 1 Item tatsaechlich selected ist.

Zumindest gibt ein

Code: Alles auswählen

QList<QTreeWidgetItem *> QTreeWidget::selectedItems () const
eine QList von Size = 1 zurueck.


Das passiert unter QT-4.7.3 (Linux/OpenSource). Mit einer aelteren Version kann ich es leider nicht testen, da ich einige Funktionen benutze, die es erst ab 4.7 gibt.

Hat jemand eine Idee, was ich hier uebersehe?

Danke im voraus.

Guenther

Verfasst: 14. Juni 2011 22:01
von FaS
So ganz vernünftig scheint mir das auch nicht (QAbstractItemView::SingleSelection?), trotzdem, was du übersiehst ist die Dokumentation:
Dokumentation hat geschrieben:void QTreeWidget::setCurrentItem ( QTreeWidgetItem * item )
Sets the current item in the tree widget.
Unless the selection mode is NoSelection, the item is also be selected.
Zumindest steht da nicht, dass die aktuelle Auswahl deselektiert wird bei SingleSelection...

Weiß nicht ob das sauber genug ist, aber setze vorher einfach:

Code: Alles auswählen

  treeWidget->clearSelection();
  treeWidget->setCurrentItem(0); // vielleicht nicht nötig
Gruß
FaS

Verfasst: 15. Juni 2011 06:26
von gboelter
Hallo FaS,

danke fuer die Muehe, aber hanz so einfach ist das offensichtlich doch nicht, denn die im Beispiel blau markierten Eintraege sind ja bis auf den ersten Eintrag offensichtlich nicht selected. Zumindest gibt ein

Code: Alles auswählen

treeWidget->selectedItems().count();
als Anzahl '1' zurueck. Und auch ein

Code: Alles auswählen

bool QTreeWidgetItem::isSelected () const
auf die markierten Eintraege gibt nur ein 'false' zurueck.

Eine gewisse Besserung gibt's mit

Code: Alles auswählen

treeWidget->setCurrentItem ( previous, 0, QItemSelectionModel::ClearAndSelect );
Damit wird der angewaehlte Eintrag selected, wenn auch nicht korrekt als solches markiert. Aber auch hier bleibt immerhin noch der urspruenglich selektierte Eintrag blau markiert.