سؤال

في Qt لدي نموذجان يقولان FirstUI وSecondUI.يفتح الرئيسي واجهة FirstUI.أتحقق هنا مما إذا كانت قواعد البيانات اللازمة للتطبيق موجودة أم لا، وإذا لم تكن موجودة، فسيتم إنشاء قاعدة جديدة.يتحقق أيضًا مما إذا كان هناك أي تفاصيل لشبكة wifi مخزنة في قاعدة البيانات.إذا كانت هناك تفاصيل عن آخر شبكة wifi متصلة، فسيبحث التطبيق عن الشبكات المتاحة ويتصل بشبكة wifi باستخدام التفاصيل من قاعدة البيانات.

الآن إذا لم تكن هناك تفاصيل wifi في قاعدة البيانات أو إذا كانت الشبكة المدرجة في قاعدة البيانات غير موجودة أو إذا كان التطبيق غير قادر على الاتصال بشبكة wifi فسوف يصدر إشارة WifiNotConnected();

لقد قمت بتوصيل الإشارة بفتحة تفتح واجهة المستخدم الثانية.

connect(this,SIGNAL(WifiNotConnected()),this,SLOT(OpenSecondUI()));
.....

void FirstUI::OpenSecondUI()
{
   SecondUI *sec = new SecondUI();
   this->close();
   sec->show();
}

يتم فتح واجهة المستخدم الثانية، لكن هذا لا يؤدي إلى إغلاق واجهة المستخدم الأولى.

يحرر:إذا كانت تفاصيل wifi موجودة، فلدي فئة (WifiBoot) ترث QObject وتقوم بمهام الاتصال نيابةً عني.نظرًا لأنني أريد تشغيل ملف GIF في واجهة المستخدم الرسومية وأن يحدث الاتصال في نفس الوقت، فقد قمت بإنشاء مثيل للفئة (WifiBoot) التي تقوم باتصال wifi ونقلها إلى مؤشر ترابط آخر.بعد توصيل شبكة wifi، أقوم بإصدار الإشارة النهائية المتصلة بالفتحة لفتح واجهة المستخدم الثانية

connect(worker,SIGNAL(finished()),this,SLOT(FinishedConnection()));

void FirstUI::FinishedConnection()
{
   OpenSecondUI();
}

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

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

المحلول 2

تم استدعاء OpenSecondui () في المنشئ نفسه.لذلك كان الإغلاق () في OpenSecondui () يحدث قبل أن يصل UI وتشغيلها.لحل هذا كما هو مقترح في منتدى كيو تي و @ Andrea.Marangoni تلميح من المنشئ الذي يجري بسكانية للغاية، استخدمت توقيت لقطة واحدة وانتقلت الرمز بأكمله في المنشئ إلى فتحة ودعا الفتحة بعد تأخير معين.هذا يضمن أنه قبل أن يتم استدعاء فتحة Opensecondui ()، كان UI قيد التشغيل.

نصائح أخرى

تحقق أولا إذا

this->close();

يعود صحيحا.قد يكون الشيء الآخر هو مجرد إخفاءه باستخدام

QWidget::hide()

وكذلك تعيين FirstUI كوالد ل SecondUI لذلك لن يتسرب تطبيقك من الذاكرة إذا كان لديك مثيلات متعددة FirstUI.(انسى الشيء الأصلي إذا كنت لا تزال close() القطعة)

هتافات

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