سؤال

أنا أفهم أكثر أو أقل كيف يعمل MPV. لكني لا أحصل على ما الفصول الدراسية:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate / QItemDelegate

هل يمكن أن تفعل لي؟

إذا كان ذلك مناسبًا ، فأنا أستخدمQGraphicsScene / QGraphicsView مع بعض العناصر (التمثيل المرئي للوحة اللعبة) التي يمكن للمستخدم التفاعل معها بينما يتم تغليف منطق التفاعل (قواعد اللعبة) في فئة أخرى.

هل كانت مفيدة؟

المحلول

AbstractItemModel QabstractItemView QabStractItemDelegate

هي من "وضع/عرض إطار عمل"
هذا إطار قوي للغاية لجزء البيانات من التطبيق الخاص بك ، هنا هو عرض الإطار.

QabstractItemModel

هو الفئة الأساسية ل نموذج MVC. لديه واجهة عالمية للوصول إلى البيانات وتغييرها ويعتني بالجزء الذي يمكن ملاحظته.

QabstractItemView

هو الفئة الأساسية ل عرض MVC. لديه واجهة aglobal لجزء العرض/التحديدات ويعتني بجزء المراقب. لا داعي للقلق بشأن نمط المراقب ، فإن الإطار يفعل ذلك لك.

QabstractItemDelegate

هو الفئة الأساسية ل وحدة تحكم MVC.
هو نمط الاستراتيجية للطلاء ، وتحرير العناصر ، ...


QGraphicsscene / QGraphicsView

هي من "إطار عرض الرسومات" وهو مستقلة عن إطار النموذج/العرض.
هذا أيضًا إطار قوي للغاية لجزء الرسومات.

المشهد

يوفر QGraphicsScene مشهد عرض الرسومات. المشهد لديه المسؤوليات التالية:

توفير واجهة سريعة لإدارة عدد كبير من العناصر التي تنشر الأحداث في كل عنصر إدارة عنصر العنصر ، مثل الاختيار والتعامل مع التركيز لتوفير وظائف عرض غير محولة ؛ أساسا للطباعة

المنظر

يوفر QGraphicsView أداة العرض ، والتي تصور محتويات المشهد. يمكنك إرفاق عدة طرق عرض إلى نفس المشهد ، لتوفير العديد من منصات المشاهدة في نفس مجموعة البيانات


إذا كنت تريد أن يكون نموذجًا مرئيًا في QGraphicsView أكثر مما سيتعين عليك كتابة عرضك الخاص استنادًا إلى QabstractItemView.
خذ QGraphicsView كعرض عرض منفذ QAbstractScrollArea::setViewport(QWidget * widget)) ثم يمكنك

  • يضيف QAbstractItemView::rowsInserted,
  • إزالة QAbstractItemView::rowsAboutToBeRemoved
  • و يتغيرون QAbstractItemView::dataChanged

العناصر في المشهد. لا تنس أن تعتني بإعادة ضبط أحداث تغيير التصميم.

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