как можно перебрать элемент foreach в QListWidget - PullRequest
6 голосов
/ 06 апреля 2011

я просто могу найти любой пример в интернете, как зациклить и получить каждый элемент в QListWidget

Ответы [ 2 ]

9 голосов
/ 07 апреля 2011
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 голос
/ 06 апреля 2011

первый результат 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...