سؤال

لدي اثنين من العمليات التي تريح الرسائل بعضها البعض. عملية A هي برنامج عادي (IE غير QT) الذي يرسل رسائل إلى معالجة B. Process B هو تطبيق QT واجهة المستخدم الرسومية يوضح الرسائل المستلمة في مربع نص.

لقد قمت بإنشاء عنصر واجهة مستخدم مخصص (يسمى ShowMessages) الذي يرث من qplaintextedit ويقرأ الرسائل من أنبوب عند انتهاء صلاحية مؤقت، ويشملها في مربع النص. لا يتم تصميم الكود حقا مثل هذا (الذي سيكون تصميم سيء للغاية وأعتقد)، لكنه مجرد جعل الأمور بسيطة هنا. لأسباب لن أخبره، تعالج عدم إيقاف تشغيله أثناء إنشاء النموذج باستخدام Designer QT.

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

يمكنني تنظيف مربع النص فقط بعد بدء التشغيل B، لكنني أعتقد أن تجنب الرسائل المراد أن تكون موجودة في ملف .وي أفضل بكثير. ما أريده هو أن أكون قادرا على كتابة التعليمات البرمجية مثل هذه القطعة:

if <I'm not in the designer>
    timer = QtCore.QTimer(self)
    QtCore.QObject.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("on_timer()"));
    timer.start(2000)

هل هناك وظيفة QT لمعرفة ما إذا كنت في المصمم؟ هل تعتقد أن التمييز بين رمز المصمم ووقت التشغيل هو "سيء"؟

(آسف على الأخطاء، ولكن الإنجليزية ليست لغتي الأساسية)

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

المحلول

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

ولكن يجب أن أقول، يبدو وكأنه وضع رمز "تحكم" في عنصر واجهة مستخدم "عرض" يمكنه، وربما يوجه مشكلة بالنسبة لك أسفل الطريق (بما في ذلك مشكلة مصمم QT الحالية التي تواجهها الآن).

فكر في القراءة على نمط تصميم MVC (نموذج المراقبة النموذجية)، إذا لم تكن بالفعل.

تحديث:

أن نكون منصفين، سؤال سؤالك كيفية اكتشاف ما إذا كنت في المصمم :)

http://doc.trolltech.com/4.3/designer-creating-custom-widgets.html# الإبداع-well-behaved-widgets.

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

وفقا ل DOC، يمكنك أساسيا تعيين "Indesignerflag" إلى True في وظيفة التهيئة () في القطعة الخاصة بك. ثم اكتشاف هذا العلم عند الاقتضاء في رمز القطعة الخاص بك.

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