سؤال

في بلدي التطبيق كيو تي لدي هذا الكائن، وشغل قبل إعداد المحتوى 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