#c #qt
#c #qt
Вопрос:
я просто могу найти любой пример в Интернете, как выполнить цикл и получить каждый элемент в QListWidget
Ответ №1:
int count = listWidget->count();
for(int index = 0;
index < count;
index )
{
QListWidgetItem * item = listWidget->item(index);
// A wild item has appeared
}
Я думаю, foreach
дело совершенно в другом.
Если вам нужна дополнительная информация об этом, посмотрите на это
http://doc.qt.digia.com/4.2/containers.html#the-foreach-keyword
прокрутите вниз до того места, где говорится о foreach
ключевом слове.
Особая благодарность Tomalak Geret’kal за добавление правильных символов, которые моя клавиатура не может выдать 🙂
Из-за такого большого количества положительных отзывов по этому поводу я также объясню макрос foreach здесь.
foreach — это специфичное для Qt дополнение к C , реализованное с использованием препроцессора. Если вы хотите отключить эту штуку, просто добавьте CONFIG = no_keywords в свой XX.pro файл.
Qt создает копию повторяющегося списка, но не беспокойтесь о производительности. Контейнеры Qt используют неявный общий доступ, при котором фактическое содержимое не копируется. Думайте об этом как о двух ссылочных переменных, использующих одну и ту же фактическую переменную. Это позволяет изменять список, по которому вы выполняете итерацию, не нарушая цикл. Обратите внимание, что изменение списка вынуждает Qt создавать копию фактического содержимого списка при первом его изменении.
foreach может использоваться для перебора всех базовых контейнеров Qt, QList QVector QMap QMultiMap и так далее. QListWidget не относится к их числу, поэтому, к сожалению, он на нем не работает. Что еще хуже, QListWidget предоставляет список не всех элементов, а только выбранных. Существует метод под названием items, который, казалось бы, хорош, но защищен.
Я думаю, это сработало бы для перебора выбранных элементов
foreach(QListWidgetItem * item, listWidget->selectedItems())
{
// A wild item has appeared
}
Комментарии:
1. К вашему сведению, объектами являются
amp;<
иamp;>
, с точкой с запятой .2. Кстати, я выбрал их по этой причине 🙂
3. Лол, я только что заметил, что это неправильный путь .. подсказка должна указывать налево. индекс меньше, чем количество.
4. Я забыл, что такая вещь существует. спасибо за редактирование: alt 60 и 62 на цифровой панели также работают!
Ответ №2:
Первый результат Google для «QWidgetList» подсказал мне, как это сделать.
Вы можете использовать QWidgetListIt
итератор.
QWidgetList wl = get_some_widget_list();
for (QWidget* w = wl.first(); w != 0; w = wl.next()) {
// use w
}
// or
foreach (QWidget* w, wl) {
// use w
}
Я не совсем уверен, откуда это foreach
взялось. Если это не предусмотрено Qt, это может быть макрос, расширяющийся до BOOST_FOREACH
, для которого вам нужно будет включить boost/foreach.hpp
.
Комментарии:
1. foreach — это макрос Qt, предоставленный в <QtGlobal> doc.qt.nokia.com/latest/qtglobal.html
2. в Qt 4.7 нет QWidgetListIt
3. @user63898: Надеюсь, этот опыт означает, что в следующий раз вы укажете версию.
4. это не работает, пример взят из Qt 3 QListWidget * wl = ui.listWidget_selected; for (QWidget* w = wl.first(); w != 0; w = wl.next()) { { QListWidgetItem* item = ((QListWidgetItem*)w); QString ItemData = item->data(Qt::роль пользователя) . toString(); }
5. Сделайте QWidgetList списком QList с помощью QWidget *, и я думаю, все готово