2012-08-31 8 views
10

W CSharp jej tak proste, jak pisanie:Jak mogę iterować elementy QListWidget i pracować z każdym elementem?

listBox1.Items.Add("Hello"); 
listBox1.Items.Add("There"); 

foreach (string item in listBox1.Items) 
{ 
    MessageBox.Show(item.ToString()); 
} 

i mogę łatwo dodawać różne obiekty na liście, a następnie pobrać je za pomocą foreach. Próbowałem to samo podejście w Qt 4.8.2, ale wydaje się, że są different.though wyglądają one bardzo podobne w first.I stwierdzili, że Qt obsługuje foreach więc poszedłem dalej i próbował coś takiego:

foreach(QListWidgetItem& item,ui->listWidget->items()) 
{ 
    item.setTextColor(QColor::blue()); 
} 

który nie powiodło się. Mówi, że item() potrzebuje parametru, który mnie myli. Próbuję iterować przez samą ListBox, więc co to znaczy? Próbowałem przekazując obiekt ListBox jak sam parametr ten ponownie nie zbyt:

foreach(QListWidgetItem& item,ui->listWidget->items(ui->listWidget)) 
{ 
    item.setTextColor(QColor::blue()); 
} 

Więc oto moje pytania:

  • Jak mogę iterację elementów QListWidget w Qt?
  • Czy mogę przechowywać obiekty jako elementy w QListWidgets, takich jak C#?
  • Jak przekonwertować obiekt w QListWidgets na ciąg (C# s ToString counter part w Qt)?

(Załóżmy, że chcemy korzystać z QMessagBox zamiast tego SetTextColor i chcesz wydrukować wszystkie elementy łańcucha w QlistWidget.)

Odpowiedz

26

Nie sądzę items function robi to, co myślisz, że to robi. Wygląda na to, że służy do dekodowania danych MIME, a nie do uzyskania listy wszystkich elementów w widgecie.

Nie widzę żadnej funkcji, aby zrobić dokładnie to, co chcesz, niestety. Pewnie przydałby findItems jako obejście, ale wydaje się, że brzydki, jeśli nie wręcz obraźliwych ... Przynajmniej można nadal używać item function ze starych dobrych for pętlach - nie są one że znacznie więcej wpisując:

for(int i = 0; i < listWidget->count(); ++i) 
{ 
    QListWidgetItem* item = listWidget->item(i); 
    //Do stuff! 
} 

Mam nadzieję, że pomoże!

+2

Dzięki za to. To niefortunne, że Qt zdecydowało się na metodę klasy items, która nie zwraca kolekcji QListWidgetItems, jakiej można by się spodziewać za pomocą metody klasy items dla dowolnej innej biblioteki dev. Mylące i niezdarne. Chodzi mi o to, dlaczego chwalić się foreach() w Qt, gdy nie zapewniają one nawet sposób iteracji submitem tego widgetu z nim? – Volomike

2

Spróbuj zrobić wskaźnik do każdego z elementów, jeśli tworzysz elementy listy w kodzie. Ale jeśli używasz pliku .ui do utworzenia elementu listy, spróbuj kliknąć prawym przyciskiem myszy i uderzając w edycję arkusza stylów. W ten sposób można go bardzo łatwo edytować.

1

można zrobić coś takiego:

for(int i = 0; i < listWidget->count(); ++i) 
{ 
    QString str = listwidget.item(i)->text(); 
    //Do stuff! 
}