How can i iterate through QListWidget items and work with each item?
In CSharp its as simple as writting :
listBox1.Items.Add("Hello"); listBox1.Items.Add("There"); foreach (string item in listBox1.Items ) { MessageBox.Show(item.ToString()); }
and i can easily add different objects to a list box and then retrieve them using foreach. I tried the same approach in Qt 4.8.2 but it seems they are different.though they look very similar at first.I found that Qt supports foreach so i went on and tried something like :
foreach(QListWidgetItem& item,ui->listWidget->items()) { item.setTextColor(QColor::blue()); }
which failed clearly.It says the items() needs a parameter which confuses me.I am trying to iterate through the ListBox itself, so what does this mean? I tried passing the ListBox object as the parameter itself this again failed too:
foreach(QListWidgetItem& item,ui->listWidget->items(ui->listWidget)) { item.setTextColor(QColor::blue()); }
So here are my questions:
- How can I iterate through a QListWidget items in Qt?
- Can i store objects as items in QListWidgets like C#?
- How can i convert an object in QListWidgets to string(C#s ToString counter part in Qt) ?
(suppose i want to use a QMessagBox instead of that setTextColor and want to print out all string items in the QlistWidget.)
Answers
I don't think the items function does what you think it does. It sounds like it's for decoding MIME data, not getting a list of all the items in the widget.
I don't actually see any function to do exactly what you want, sadly. You could probably use findItems as a workaround, but that seems ugly, if not downright abusive... At least you can still use the item function with good old for loops - they're not that much more typing:
for(int i = 0; i < listWidget->count(); ++i) { QListWidgetItem* item = listWidget->item(i); //Do stuff! }
Hope that helps!
Try making a pointer to each of the items if you are making the list items in code. But, if you are using the .ui file to make a list item try right clicking it and hitting edit stylesheet. You can edit it very easily that way.
You can do something like this:
for(int i = 0; i < listWidget->count(); ++i) { QString str = listwidget.item(i)->text(); //Do stuff! }