سؤال

في كيو تي ، كلاهما صالح ، ويتصرفان بنفس الطريقة:

emit someSignal(value);

مقابل

emit(someSignal(value));

هل هناك أي فرق?

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

المحلول

هل هناك أي فرق?

لا يوجد فرق آخر من قوس الخارجي كونها لا داعي لها ، لذلك المبرمجين سوف يفضلون ذلك ، وأيضا أكثر استخداما تقليديا في مشاريع كيو تي هناك.

سبب عدم وجود فرق يرجع إلى هذا:

# define emit

يمكنك أن ترى تعريف هذا في شفرة المصدر.

لذلك ، هو في الأساس أعلن فقط إلى سلسلة "فارغة" والمعالج سوف تحل محل المتغيرات الخاصة بك ل:

someSignal(value);

أو

(someSignal(value));

يمكنك أن ترى هذا بنفسك إذا قمت ، لإجراء اختبار سريع ، بإيقاف تنفيذ المترجم بعد تشغيل المعالج المسبق ، على سبيل المثال.ال -E الخيار في حالة دول مجلس التعاون الخليجي.

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

من ناحية أخرى ، هذا ليس إلزاميا ، لذلك يمكن لأي شخص إعادة تعريفه أو إلغاء تحديده أو حتى إيقاف تشغيله من خلال إخبار كيو تي عدم استخدام الكلمات الرئيسية على النحو التالي:

CONFIG += no_keywords

بهذه الطريقة ، يمكن أن يكون لا يزال من الممكن استخدام آلية كيو تي إشارة فتحة مع Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT وكل ذلك.

هنا يمكنك العثور على الوثائق المقابلة حول Q_EMIT, ، على سبيل المثال:

كيوميت

استخدام هذا الماكرو لاستبدال الكلمة تنبعث منها لانبعاث إشارات, عندما تريد استخدام إشارات كيو تي و فتحات مع إشارة حزب 3 / آلية فتحة.

يتم استخدام الماكرو عادة عندما يتم تحديد نو كيوردس مع متغير التكوين في ملف برو ، ولكن يمكن استخدامه حتى عندما لا يتم تحديد نو كيوردس.

نصائح أخرى

لا يوجد فرق.في الواقع, emit يتم تعريفه على أنه ماكرو فارغ ، لذلك فقط

someSignal(value);

هو أيضا ما يعادل.ال emit فقط يجعل الأمر أكثر وضوحا كنت اثار إشارة كيو تي.

لا يوجد اختلاف على الإطلاق.إنه تعريف مسبق فارغ، وبالتالي يتم إزالته قبل أن يحصل المترجم على رؤية التعليمات البرمجية.فيما يتعلق بالمترجم المعني، فإنه غير موجود حتى.

موجود بحتة لصالح المبرمج، للسماح له / بعلم ذلك في هذه المرحلة، قد تتم معالجة إشارة وربما تساعد في تصحيح الشفرة.

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