在我的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>();
}

但没什么用,我甚至不能让程序编译。救命啊!:天

最佳答案

也许:

(*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){
    ...
}

关于linux - Qt4.4.3上的QVariant/QTreeWidgetItem/iterator问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/414115/

10-13 07:23