Qt4.4.3上的QVariant / QTreeWidgetItem / iterator问题
-
03-07-2019 - |
题
在我的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>();
BTW,使用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){
...
}
不隶属于 StackOverflow