هل هناك خطأ في التعليمات البرمجية الخاصة بي لملء qtreeview؟
سؤال
أنا أستخدم Pyqt 4.4.
أفضل عرض باستخدام بعض الصور. يجب أن تحتوي جميع العقد على أوراق من 0 إلى 99. يتم تحميلها بشكل تدريجي باستخدام canFetchMore()
و fetchMore()
. وبعد ولكن لسبب غير معروف بالنسبة لي هذا يعمل فقط لعقدة الجذر. (الصورة 1)
إذا كنت طي وتوسيع عقدة يتم تحميل 10 قيم إضافية. (صورة 2 و 3)
من الغريب أيضا أن يتم تحميل 10 قيم، حيث يتم تحميل التعليمات البرمجية فقط 5 لكل مكالمة fetchMore()
, ، وهذا يعني أن هذا يطلق عليه 2 مرات قبل توقف التعليمات البرمجية لتحميل المزيد من البيانات.
لقد كتبت مثالا صغيرا لإظهار المشكلة، فقط تشغيله python test.py
.
http://snipt.org/lh.
هل يعرف أحد ما الذي يسبب هذا الخطأ؟
المحلول
ألقيت نظرة على مصدر كيو تي (V4.5، على الرغم من أنني لا أتوقع فرقا كبيرا بين V4.4 و V4.5) ل QabstractItemview و QtreeView، ولا أعتقد أنهم يدعمون التحميل كسول تدريجي من العقد الطفل.
qabstractitemview لا يوجد لديه فكرة من الأشجار، لذلك يستدعي فقط fetchMore()
في أفضل المؤشر الأكثر. يدعو fetchMore()
متي:
- يتم تحديث الهندسة
- يتم نقل أشرطة التمرير
- يتم إدراج الصفوف
- يتم تغيير العنصر الحالي نتيجة عملية السحب الذاتي والإفلات التلقائي
qtreeview يدعو بالإضافة إلى ذلك fetchMore()
متي:
- يتم توسيع عنصر (هذا هو في الأساس الوقت الوحيد الذي يستدعيه
fetchMore()
مع مؤشر غير جذر) - يحتاج تخطيط الرأي إلى رد الفعل، مثل مع
expandAll()
وcollapseAll()
أعتقد أن أفضل حل سيكون في الفئة الفرعية QTREEVIEVE لجعله استدعاء fetchMore()
في الأماكن المناسبة ومع المؤشرات المناسبة.