سؤال

لقد حصلت على تطبيق QT يستخدم QPOinters لإظهار حوار واجهة المستخدم الجديدة (عناصر واجهة المستخدم). يمكن أن يحتوي التطبيق الرئيسي على العديد من نفس القطعة المحملة ببيانات مختلفة. المشكلة التي أواجهها هي حذف وتحرير الذاكرة لكل عنصر واجهة مستخدم. إذا قمت بمراقبة استخدام ذاكرة الوصول العشوائي للبرنامج ، في كل مرة أنقر فوق الزر لفتح إحدى هذه الأدوات الجديدة ، فإنه يزيد من ذاكرة الوصول العشوائي وعندما أغلق عنصر واجهة المستخدم ، لا يبدو أنه يحرر ذاكرة الوصول العشوائي. لقد حاولت استخدام deleteLater وحلول أخرى ولكن استمر في الحصول على حوادث في البرنامج.

رمز المثال هنا:

QPointer<ListReservations> listResWindow = new ListReservations(resID);
listResWindow->setNum(numpeople);
listResWindow->show();

سيسمي هذا أداة "Listreservations" التي يُعلن أنها أ QDialog (ليس وسيط). في هذا الحوار هذا ، لدي زر لإغلاق النافذة التي تستدعي QWidget::close() فتحة.

أعتقد أن السؤال هو كيف يمكن لبرنامجي الرئيسي (الذي يحتوي على QPointer) تعرف متى يتم إغلاق مربع الحوار ثم تحرير مربع الحوار وحذف المؤشر (إن أمكن) لحفظ المزيد من الذاكرة ...

اعتقدت أنك قد تكون قادرًا على القيام QConnect() إلى QPointer كائن ، لكن لا يبدو لي أن أجد أي إشارات أو فتحات من شأنها أن تسمح لتمرير المؤشر ، أقل بكثير من إرسال الإشارة بمجرد إغلاق مربع الحوار بالفعل وجاهز للحذف.

ربما أحتاج إلى نوع من الوظائف في البرنامج الرئيسي الذي يأخذ كائن مؤشر عام ثم هل لديك استدعاء QDialog قبل استدعاء فتحة قريبة؟ في هذه الوظيفة ، ستمر نفسها لتدميرها؟ مجرد إلقاء الأفكار التي حاولت تنفيذها ولكن فشلت في ....

لا أعتقد أنه يمكنني إعادة استخدام نفس المؤشر في أي مكان آخر لأنه من الناحية النظرية ، قد يكون لديك نوافذ Listreservations متعددة مفتوحة في نفس الوقت.

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

المحلول

تأكد من قيامك بتعيين ملف Qt::WA_DeleteOnClose علامة السمة في مربع الحوار الخاص بك باستخدام QWidget::setAttribute(). يجب أن يتأكد من تدمير الحوار بشكل صحيح عندما يتم إغلاقه. انظر وثيقة QT لمزيد من التفاصيل.

على افتراض أن الذاكرة تحررت الآن بشكل صحيح ، يجب على المؤشر إبطال نفسه ، من وثيقة QT:

يتصرف مؤشر حراسة ، qpointer ، مثل مؤشر C ++ العادي T *، باستثناء أنه يتم ضبطه تلقائيًا على 0 عند تدمير الكائن المشار إليه (على عكس مؤشرات C ++ العادية ، والتي تصبح "مؤشرات متدلية" في مثل هذه الحالات)

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