سؤال

تطبيق 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 على عنصر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top