Как я могу перебирать элементы 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 в качестве самого параметра, это снова не удалось:

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

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

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

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

3 ответов


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

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

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

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


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


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

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