Как я могу перебирать элементы 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, таких как C #?
  • Как я могу преобразовать объект в QListWidgets в строку (счетчик ToString C # в Qt)?

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


person Rika    schedule 31.08.2012    source источник


Ответы (3)


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

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

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

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

person Xavier Holt    schedule 31.08.2012
comment
Спасибо за это. К сожалению, Qt решил создать метод класса элементов, который не возвращает коллекцию QListWidgetItems, как можно было бы ожидать от метода класса элементов для любой другой библиотеки разработчиков. Непонятно и неуклюже. Я имею в виду, зачем хвастаться foreach () в Qt, если они даже не предоставляют способ итерации с его помощью подэлементов этого виджета? - person Volomike; 21.10.2015

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

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

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

person Community    schedule 31.08.2012