Funktion für selektierte QListWidgetItems anzeigen

Alles rund um die Programmierung mit Qt
Antworten
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Funktion für selektierte QListWidgetItems anzeigen

Beitrag von Exasperation »

Hallo zusammen!

Also mein Problem sieht folgendermaßen aus: Ich habe eine QList, wenn man ein Item anklickt wird mittels connect eine Funktion aufgerufen... nun ist es mein Ziel, dass die Funktion für jedes SELEKTIERTE Item aufgerufen wird... Also um konkret zu werden: Die Items sind Bearbeitungspfade die in einem GL Widget angezeigt werden. Im Moemnt schaffe ich es nur, dass immer ein 3D Pfad angezeigt wird, ich möchte aber, dass alle selektierten Items/Pfade, im GL Widget angezeigt werden. Kann mir da jemand weiterhelfen?

Code: Alles auswählen

connect( m_path_list, SIGNAL(itemClicked( QListWidgetItem* )), this, SLOT(on_path_list_itemClicked( QListWidgetItem* )) );
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Lass dir von diesem Slot dann mittels http://doc.trolltech.com/4.5/qlistwidge ... ectedItems alle Items liefern.
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Das hab ich auch schon gesehn, wusste aber nicht wie ich das dazu einsetzen kann.. Vielen Dank shconmal, werds versuchen und mich dann melden ob es klappt.. :)
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Dann wäre aber auch empfehlenswert stattdessen http://doc.trolltech.com/4.5/qlistwidge ... ionChanged zu nutzen. Dann brauchst du auch nur ein connect.
Dein gewähltest sagt auch kein Stück aus, ob es selektiert wurde oder de-selektiert.
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Ich komm da irgendwie nicht dahinter...
Meine Konstruktion sieht bisher wie folgt aus:

Code: Alles auswählen

connect( m_path_list, SIGNAL(itemSelectionChanged()), this, SLOT( multi_selection( QList<QListWidgetItem *> ) ) );
Die Funktion multi_selection habe ich folgendermaßen definiert:

Code: Alles auswählen

void main_window::multi_selection( QList<QListWidgetItem *> my_items )
{
	int item_count = my_items.size();
	for( int i = 0; i <= item_count; ++i )
	{
		on_path_list_itemClicked( my_items.at(i) );
	}

}
Das funktioniert aber bisher leider nicht... Kompiliert wird es, aber bei selektieren der verschiedenen Items passiert nichts...
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Im connect() müssen Signal UND Slot die gleichen Parameter haben. D.h. dein Slot muss

Code: Alles auswählen

void multi_selection();
heißen.
IN diesem Slot kannst du dann die Liste der selektierten Items per QListWidget::selectedItems() holen (= eine QList<QListWidgetItem*>).

[edit] deine for-Schleife geht auch bisschen einfacher:

Code: Alles auswählen

foreach (QListWidgetItem* item, listWidget->selectedItems())
   doSomethingWith(item);
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag von Exasperation »

Jap genau das is mir auch eingefallen :) So langsam sieht es gut aus :)

Code: Alles auswählen

connect( m_path_list, SIGNAL(itemSelectionChanged()), this, SLOT( on_selection_change() ) );

Code: Alles auswählen

void main_window::on_selection_change()
{
	multi_selection( m_path_list->selectedItems() );
}

void main_window::multi_selection( QList<QListWidgetItem *> p_items )
{
	int item_count = p_items.size();
	for( int i = 0; i <= item_count-1; i++ )
	{
		on_path_list_itemClicked( p_items.at(i) );
	}

}
(Ja, aus den zwei Funktionen werd ich noch eine machen)
Antworten