2012-08-31 7 views
10

In CSharp seine so einfach wie Schriftfelter:Wie kann ich QListWidget-Elemente durchlaufen und mit jedem Element arbeiten?

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

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

und ich kann leicht verschiedene Objekte zu einem Listenfeld hinzufügen und sie dann foreach abrufen. habe ich versucht, den gleichen Ansatz in Qt 4.8.2, aber es scheint, sie sind different.though sie zuerst in Verbindung sehr ähnlich aussehen gefunden, dass Qt unterstützt foreach so ging ich auf und versuchte so etwas wie:

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

die scheitert eindeutig. Es sagt, dass die items() einen Parameter brauchen, der mich verwirrt. Ich versuche, die ListBox selbst zu durchlaufen, also was bedeutet das? Ich versuchte, das ListBox-Objekt als Parameter übergeben sich dies scheiterte erneut zu:

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

hier also meine Fragen sind:

  • Wie kann ich durch eine QListWidget Artikel in Qt iterieren?
  • Kann ich Objekte als Objekte in QListWidgets wie C# speichern?
  • Wie kann ich ein Objekt in QListWidgets in String konvertieren (C# s ToString Zähler Teil in Qt)?

(nehme ich einen QMessagBox anstelle des SetTextColor verwenden möchten, und wollen in der QListWidget alle String-Objekte auszudrucken.)

Antwort

26

Ich glaube nicht das items function tut, was Sie denken, es tut. Es klingt, als würde es MIME-Daten dekodieren, ohne eine Liste aller Elemente im Widget zu erhalten.

Ich sehe leider keine Funktion, um genau das zu tun, was Sie wollen, leider. Sie könnten wahrscheinlich findItems als Abhilfe verwenden, aber das scheint hässlich, wenn nicht gar missbräuchlich ... Mindestens Sie noch die item function mit guten alten for Schleifen verwenden können - sie sind nicht dass viel mehr Typisierung:

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

Hoffe, dass hilft!

+2

Dank dafür. Es ist bedauerlich, dass sich Qt dafür entschieden hat, eine Items-Klassenmethode zu erstellen, die keine Collection von QListWidgetItems zurückliefert, wie man es von einer Items-Klassenmethode für eine andere Dev-Library erwarten würde. Verwirrend und ungeschickt. Ich meine, warum prang ich mit einer foreach() in Qt, wenn sie nicht einmal eine Möglichkeit bieten, die Unterelemente dieses Widgets damit zu iterieren? – Volomike

2

Versuchen Sie, einen Zeiger auf jedes der Elemente zu setzen, wenn Sie die Listenelemente im Code erstellen. Wenn Sie jedoch die .ui-Datei verwenden, um ein Listenelement zu erstellen, klicken Sie mit der rechten Maustaste darauf und wählen Sie das Bearbeiten-Stylesheet. Sie können es sehr einfach auf diese Weise bearbeiten.

1

Sie können etwas tun:

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