2

私の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

4

1 に答える 1

1

多分:

(*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){
    ...
}
于 2009-01-06T06:27:32.920 に答える