سؤال

سؤالي حول QT و ITS QabstractItemModel.

لدي خريطة للسلاسل والزوجي (std::map<stringclass, double>) والتي أود تقديمها في عنصر واجهة مستخدم QT. بينما يمكنني استخدام qtableview لذلك ، أود أن أستغل حقيقة أن مفاتيح الخريطة ذات الشكل "abc.def.ghi"حيث يمكن أن تكون هناك سلاسل متعددة يمكن أن تبدأ"abc.def"وأكثر من ذلك يبدأ بـ"abc".

لذلك أود إعداد نموذج بيانات الأشجار لتقديم العناصر في أ qtreeview مثل

(-) abc
    |--(-)def      
          |--ghi    3.1415
          |--jkl    42.0815
    |--(+)pqr
    |--(+)xyz

مفاتيح بلدي std::map هي أوراق الشجرة ، حيث ستكون جميع العقد الأخرى مؤقتة ومباني للاستعاضة لدعم الطي لراحة المستخدم.

لسوء الحظ ، الأساليب rowCount, index, columnCount, ، و data لديك مواد مواد ، لذلك لا يمكنني ببساطة إعداد بنية بيانات auxillary للرؤوس داخل بلدي QabstractItemModel اشتقى وتغيير بنية البيانات الموجودة هناك.

ماذا ستكون أفضل ممارسة لذلك؟ هل يجب أن أقوم بإعداد طبقة فئة أخرى بين بلدي std::map و ال QabstractItemModel أم أن هناك طريقة أكثر ذكاء للقيام بذلك؟


تحرير 1: std::map يمكن أن يتغير بينما qtreeview يظهر ويستخدم ، لذلك قد يتم إلقاء العقد الإضافية وإعادة بنائها. افتراضي هو أن أفضل طريقة للتعامل مع هذا هو إعادة هيكلة QabstractItemModel - أو يجب أن ألقي هذا النموذج بعيدًا وأخصيصًا جديدًا إلى qtreeview؟ في هذه الحالة ، يمكنني إعداد جميع العقد داخل المُنشئ دون أن أزعجها من قمة الأساليب ، على ما أعتقد.

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

المحلول

أود تحليل الخريطة وإنشاء بنية بيانات شجرة بناءً عليها. تأكد من مزامنة النموذج عند تغيير الخريطة. إذا أصبحت خطوة المزامنة هذه معقدة للغاية ، فقد ترغب في الاحتفاظ ببياناتك في بنية شجرة من البداية وتحويلها إلى خريطة عند الضرورة.

يبدو تحليل الخريطة الموجودة في وظائف النموذج فكرة سيئة بالنسبة لي ، فأنت تريد أن تكون هذه الوظائف في أسرع وقت ممكن.

نصائح أخرى

لا أرى كيف سيكون const-modifiers مشكلة حقًا.

ما أعضاء الخاص بك QAbstractItemModel مشتقات هل تريد تعديل متى rowCount, index, columnCount و data تسمى الطرق؟ يمكنك تخزين إشارة إلى خريطتك جيدًا ، وحساب كل شيء منها. لا حاجة لتعديل الخريطة نفسها لاستخراج المعلومات المطلوبة (بقدر ما أستطيع أن أقول!).

تحرير بعد EDIT1 والتعليقات :
إذا كان من المحتم أن يتم تعديل خريطتك ، فاستخدمها كهيكل أساسي في صفك. إذا لم تتمكن من الاحتفاظ بمرجع إلى خريطتك لأن عمر النموذج قد يتجاوز الخريطة ، فاستخدم المؤشرات الذكية للتأكد من عدم حدوثها.

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