Как я могу перебирать элементы 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!
}