Как я могу перебирать элементы QListWidget и работать с каждым элементом?

В CSharp это так же просто, как писать:

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

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

и я могу легко добавлять различные объекты в список и затем извлекать их, используя foreach. Я попробовал тот же подход в Qt 4.8.2, но кажется, что они разные. Хотя на первый взгляд они очень похожи. Я обнаружил, что Qt поддерживает foreach, поэтому я продолжил и попробовал что-то вроде:

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

который потерпел неудачу явно. Он говорит, что items() нужен параметр, который меня смущает. Я пытаюсь перебрать сам ListBox, так что это значит? Я попытался передать объект ListBox в качестве самого параметра, и это снова не удалось:

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

Итак, вот мои вопросы:

  • Как я могу перебирать элементы QListWidget в Qt?
  • Могу ли я хранить объекты как элементы в QListWidgets, например С#?
  • Как я могу преобразовать объект в QListWidgets в строку (счетная часть С# s ToString в Qt)?

(Предположим, что я хочу использовать QMessagBox вместо этого setTextColor и хочу распечатать все строковые элементы в QlistWidget.)

Ответ 1

Я не думаю, что функция items делает то, что вы думаете, что она делает. Это похоже на декодирование данных MIME, а не на получение списка всех элементов в виджетах.

Я действительно не вижу никакой функции, чтобы делать то, что вы хотите, к сожалению. Возможно, вы использовали бы findItems как обходной путь, но это кажется уродливым, если не откровенным оскорбительным... По крайней мере, вы все равно можете использовать функция элемента с хорошими старыми петлями for - они не намного больше печатают:

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

Надеюсь, что это поможет!

Ответ 2

Попробуйте сделать указатель на каждый из элементов, если вы делаете элементы списка в коде. Но, если вы используете файл .ui для создания элемента списка, попробуйте щелкнуть его правой кнопкой мыши и нажать правую таблицу стилей. Вы можете легко отредактировать его таким образом.

Ответ 3

Вы можете сделать что-то вроде этого:

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