QTreeWidget::setCurrentItem ( QTreeWidgetItem * item )

Alles rund um die Programmierung mit Qt
Antworten
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

QTreeWidget::setCurrentItem ( QTreeWidgetItem * item )

Beitrag 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
Dateianhänge
treeWidget.png
treeWidget.png (12.4 KiB) 3805 mal betrachtet
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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
gboelter
Beiträge: 80
Registriert: 5. Dezember 2007 14:52
Wohnort: Davao City, Philippines

Beitrag 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.
Guenther
Davao City, Philippines, Planet Earth, 28°C

Qt 4.8.1 for Linux/X11 - Open Source Edition for Application Development
Antworten