كيفية استخدام إطار عمل QT/عرض مع إطار عرض الرسومات

StackOverflow https://stackoverflow.com/questions/3188584

سؤال

أنا أعمل على تطبيق رسم الخرائط وأحتاج إلى عرض كائنات البيانات باستخدام جدول ونموذج وكأشياء رسومية في الخريطة. أنا أستخدم PYQT ، لكن هذا ليس مهمًا حقًا لأن هذا سؤال QT وليس سؤالًا بيثون.

إذا كنت بحاجة فقط إلى الجدول وتشكيل مشاهدات ، فسيكون ذلك سهلاً ، سأستخدم فقط إطار عمل QT/View. ومع ذلك ، فأنا بحاجة إلى عرض الخريطة لتوفير الوظائف المتاحة حقًا فقط باستخدام إطار عرض الرسومات ، وهو في الأساس إطار عمل/عرض خاص مع QGraphicsScene الذي يعمل كنموذج بيانات.

أستطيع أن أفكر في طريقتان للقيام بذلك. يمكن للمرء أن يبدأ بنموذج موثوق فئة فرعية من QabstractItemModel ، وربطه بالفئة الفرعية من QabstractItemView ومن هناك إنشاء وتحديث QGraphicsItems في المشهد. هذا يبدو قبيحًا لأنني لست متأكدًا من كيفية التعامل مع تفاعل المستخدم مع عناصر البيانات والتغييرات على الرغم من التفاعل مع QGraphicsItems.

الطريقة الأخرى التي يمكنني التفكير فيها هي التعامل مع QGraphicsScene كمصدر للبيانات الموثوق ، وتخزين كائن البيانات في خاصية .DATA () من كل QGraphicSitem. سأقوم بعد ذلك بتكليف QabstractItemModel وأكتبها بحيث تصل إلى البيانات الموجودة في المشهد لأنها تخزن البيانات ، فإن المشاهدات الأخرى ستستخدم هذا كنموذجها. كيف يمكنني نشر التغييرات على البيانات في المشهد حتى النموذج؟

بغض النظر عن النهج الذي أتبعه ، يبدو أن هناك فجوة لا يتم التعامل معها بواسطة الأطر. في النموذج/العرض ، يُفترض أن يتم إجراء جميع التغييرات في النموذج. في عرض الرسومات ، يُفترض أن يتم إجراء جميع التغييرات في المشهد.

لذا ، ما هو النهج الذي ستختار QabstractItemModel (موثوق)-> QabstractItemView-> QGraphicsScene أو QGraphicsscene (موثوق)-> QabstractItemModel-> طرق عرض أخرى. لماذا تختار أحدهم على الآخر وما هي gotchas التي تتوقعها؟ هل احتاج أي شخص آخر إلى سد هذه الفجوة بين أطر عمل/عرض الطراز التوأم الخاص بـ QT وكيف فعلت ذلك؟

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

المحلول

QabstractItemModel (موثوق)-> QabstractItemView-> QGraphicsScene

بدون أدنى شك. لقد فعلت هذا من قبل ، فهذا يتطلب القليل من الازدواجية (على الأقل بعض ما لم أستطع تجنبه) ولكن لا شيء سيء للغاية.

يتيح لك ذلك أيضًا تمثيل بياناتك في طرق العرض القياسية إلى جانب المشهد الذي يعد لطيفًا جدًا.

أفضل نصيحة لي هي تخزين أ QHash من QPersistantModelIndex إلى QGraphicsItem و QGraphicsScene في ال QAbstractItemView انت صنعت. هذا يتيح لك الذهاب بسرعة بين الأراضي النموذجية/عرض (QModelIndex) لعرض الرسومات الأرض (QGraphicsItem)

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