Вопрос

В моем приложении qt у меня есть этот объект, заполненный перед настройкой содержимого моего QTreeWidget:

QList<QTreeWidgetItem*> items;

Я заполняю QList таким образом:

QVariant qv; // I need this for "attaching" to the item my linuxPackage object
qv.setValue(linuxPackage);
packRow->setData(1, Qt::UserRole,qv); // packRow is my own object inherited from QTreeWidgetItem, I "put" the QVariant into it
items.append(packRow); // then I put my item into the QList

в конце работы мой QList насчитывает почти 1000 элементов.

Мне нужно перебрать их, и для каждого элемента мне нужно получить данные "linuxPackage" этим (проверенным и работающим) способом:

Pkg linuxPackage = this->data(1,Qt::UserRole).value<Pkg>(); // Pkg is my own class for the linuxPackage object

Итак, я пытался извлечь необходимые данные таким способом:

QList<QTreeWidgetItem*>::iterator iter; 
for (iter = items.begin(); iter != items.end(); ++iter){
    Pkg pack = iter->data(1,Qt::UserRole).value<Pkg>();
}

Но ничего не работает, я даже не могу запустить компиляцию программы.Помогите!:D

Это было полезно?

Решение

Возможно:

(*iter)->data(1,Qt::UserRole).value<Pkg>();

Кстати, более простой способ сделать это с Qt4:

foreach (const QTreeWidgetItem *item, items) {
    Pkg pack = item->data(1,Qt::UserRole).value<Pkg>();
}

по крайней мере, вы должны использовать const_iterators =)

QList<QTreeWidgetItem*>::const_iterator iter; 
for (iter = items.constBegin(); iter != items.constEnd(); ++iter){
    ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top