linux - qt4.4.3 上的 QVariant/QTreeWidgetItem/iterator 问题

标签 linux qt kde-plasma qtreewidget qvariant

在我的 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){
    ...
}

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

相关文章:

python - 从 QListWidget 拖放到 QPlainTextEdit

linux - 将秒数转换为 hh :mm:ss format (or whatever format Excel or LibreOffice likes) and insert it back to a csv file in Bash

python - 在哪些系统/文件系统上 os.open() 是原子的?

在运行时检查 GCC 版本

c++ - 如何在 Linux 上创建 .desktop 文件应用程序启动器?

java - 在哪里更改 Eclipse 用户界面中的列表项背景颜色?

centos - KDE 不会在 CentOS 上自动挂载 DVD

linux - Windows 下 Keys 的随机数生成器 - 从 Linux 移植

c++ - 如何在 GPU 而不是 CPU 上运行 qt 应用程序

QtSQL + Sqlite 并支持 .size() 函数?