QGraphicsItem مشكلة إعادة رسم
-
22-09-2019 - |
سؤال
تطبيق QT GUI بسيط للغاية:
- في المشهد لدي دوائر متعددة تم تنفيذها كـ QGraphicsItem
- BoundingRect يعود مربع حول هذه الدائرة.
- طريقة "الشكل" لم يتم تجاوزها.
تظهر المشكلة عندما تكون طريقة Paint () أضفت:
if (isSelected()) {
painter->drawRect(re);
}
يتم اختيار الاختيار بشكل جيد ، لكن عدم التوصيل لا يسبب إعادة رسم. في مستوى السجل ، يمكنني رؤية هذا العنصر الذي فقده حقًا علامة التحديد. استدعاء تحديث () من itemChange لا طائل منه أيضًا. شكرا لك مقدمًا على أي اقتراح.
المحلول
بعد 10 أيام ، عدت إلى هذه المشكلة واكتشفت أن QGraphicsItem تم إنشاؤها معsetCacheMode(DeviceCoordinateCache);
يا إلهي! خطأ غبي ، عندما تمت إزالة هذا الخط (افتراضيًا QGraphicsItem :: Nocache المستخدم) يتم إعادة رسمها جيدًا.
نصائح أخرى
يمكنك أيضًا محاولة تغيير QGraphicsView الافتراضي :: MinimalViewPortUpDate إلى FullViewPortUpDate مع setViewPortUpDatemode (QGraphicsView :: FullViewPortUpDate) ؛
أو يمكنك استدعاء المشهد ()-> update () ؛ من العنصر لتحديد موعد إعادة الطلاء.
كان أحدهم مطلوبًا على الأقل عندما استمرت في تغيير علم QGraphicsItem :: Itemhasnocontents على عنصر.