بتـــــاريخ : 2/26/2011 1:16:31 AM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 809 0


    Signalslot المرجع العربي آلية Signal and Slot

    الناقل : elmasry | العمر :42 | الكاتب الأصلى : ♥ حُوريّة ♥ | المصدر : www.arabteam2000-forum.com

    كلمات مفتاحية  :

    ارفق صورة : monthly_03_2009/post-140583-1238542203.gif

    Signal and Slot
    بســم الله الـرحمــن الرحيــم

    وصف المقال:
    هذا المقال سيكون ملخص متكامل و مرجع عربي كامل لآلية Signal and Slot المبتكرة في نظام Qt. سيعتمد المقال على مراجع موثوقة مثل التوثيقات و المسودات الرسمية لـ Qt بالإضافة إلى بعض المراجع التجارية مثل الكتب التي تعتني بدراسة Qt.

    هذا الملخص ليس موجزاً بل سيعمل على جمع شتات آلية Signal and Slot ليكون مرجع عربي لهذه الآلية, هذا يعني أنه موجهاً لكل مهتم و مهتمة بتقنية Qt في العالم العربي.


    مدخل إلى مفهوم Signal and Slot:

    بطبيعة البرامج ذات الواجهة الرسومية و التي تعتمد في بنائها على الكائنات المرئية(الزرارات و الآيكونات) أو تلك الغير مرئية و التي تعمل كأدوات مساعدة لغيرها خلف الكواليس فإن هناك آلية مسؤولة لتحقيق إتصال بين تلك الكائنات. هذا الإتصال ببساطة أو بتصور عقلي هو عبارة عن رسائل أو إشارات تُرسل من كائن إلى آخر أثناء تغير حالته الراهنة, على سبيل المثال الضغط على زرار معين أو تعبئة أو تفريغ زرار الراديو ستقوم هذه الكائنات بإرسال إشارة إلى النظام المسؤول عن البرنامج مشيرة إليه بأن حالتها الراهنة قد تغيرت. هذا ما يُعرف بالـ Signal في نظام و تقنية Qt.

    بناءً على تلك الإشارة أو تلك الرسالة Signal قدْ يكون هناك استغلال لهذه الإشارة من قِبل المبرمج لتنفيذ أمر برمجي أو لإجراء عملية برمجية في البرنامج. هذا الإجراء و تحديداً في لغة ++C و تقنية Qt دائماً يكون مهيكلاً على شكل دالة Function و هي دالة عادية جداً بالنسبة للغة ++C أما بالنسبة لنظام و تقنية Qt فهي تُسمى Slot.

    عملية الربط هذه بين الكائنات داخلياً في البرنامج بهذه الطريقة تُسمى اصطلاحياً بـ inter-object communication. و آلية signal and slot تعمل على تحقيق هذا الربط و هذا الإتصالات بين الكائنات في البرنامج, و التي ابتكرتها منظمة
    Trolltech حصرياً لتقنية Qt خالية من العيوب التي قد تكون في آليات أخرى مشابهة في بعض المكتبات الرسومية.


    برنامج استهلالي:

    سنقوم في هذا المثال بإلقاء نظرة على ماهية آلية Signal and Slot لفهم بعض الأشياء الأساسية و العامة من الناحية النحوية و التقنية.

    برنامج التالي عبارة عن مزلاج slider و صندوق الفافة spin box قمنا بعملية ربطهم بواسطة آلية Signal and slot, بحيث إذا قمنا بتحريك المزلاج لتغيير المعيار يتأثر بهذه العملية قيمة صندوق الفافة و العكس صحيح. الصورة التالية للقطعة المهمة من الشيفرة بالإضافة إلى نافذة البرنامج اثناء التطبيق:

    ارفق صورة : monthly_03_2009/post-140583-1238542652.png

    ما يهمنا في هذه الشيفرة هي القطعة البرمجية من السطر 26 إلى غاية السطر 33, و التي تصف لنا كيفية استعمال آلية Signal and Slot و كيفية ربط الكائنات بواسطتها.

    شرح البرنامج السابق:

    بعد تضمين كل الملفات المطلوبة للأصناف المستخدمة في البرنامج مثل Qwidget و QspinBox و Qslider و بعد إنشاء الكائنات و تعيين خصائصها من قيم و غير ذلك, و تصفيفهن بواسطة آلية التصفيف Layout, حان وقت الربط بين تلك الكائنات كما هو موجود من السطر 26 إلى السطر 33.

    كل الأصناف في Qt وارثة شرعية من الصنف الجد الأكبر Qobject. و في هذا الصنف هناك الدالة المسؤولة عن عملية ربط الكائنات بعضها ببعض و هي الدالة connect. نعم! هناك دالة ايضاً تعمل على فصل و إلغاء هذا الإتصال و هذا الربط و هي الدالة disconnect.

    الدالة connect هذه و التي هي المسؤولة عن تنظيم عملية الربط بين الكائنات بواسطة آلية Signal and Slot تتضمن اربعة خانات لكتابة و تمرير المقترحات اللازمة لعملية الربط. الخانة الأولى و هي لكائن ما و يجب أن يكون مؤشراً pointer أو مرجعاً reference, و هو الكائن الذي نريد استغلال إشارته التي يقذفها إذا طرأ عليه تغيير ما و هي الـ SIGNAL الخاصة به و هي متضمنة في الخانة الثانية بين أقواس الماكروز SIGNAL. تماماً مثل valueChanged(int) الموجودة بالبرنامج السابق و هي القطعة التالية:

    ارفق صورة : monthly_03_2009/post-140583-1238543421.png

    الخانة الثالثة و هي مخصصة لكائن ما و يجب أن يكون مؤشراً pointer أو مرجعاً reference ايضاً. هذا الكائن هو الذي سينتظر تلك الإشارة من الكائن الأول ليقوم بتنفيذ و استدعاء الدالة المتمثلة في الخانة الرابعة و الأخيرة و هي الـ SLOT الخاصة به.
    إذا الخانات للدالة connect تكون من اليسار إلى اليمين متفرقة بالفاصلة على النحو التالي:
    ,..,.,.,.,,..,.,.,.,.,.,.,.,.,.,,.,.,.,.,.,.,.

    كائن1, الـ signal لكائن1, كائن2, الـ slto لكائن2

    ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.

    ملاحظة:
    ربما تكون هناك حالة خاصة واحدة فقط و هي ربط signal بـ signal آخر لكائن2, بنفس الترتيب تماماً.

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


    ملاحظة:
    البرنامج السابق ليس برنامج نموذجياً و إنما فقط لإيصال الفكرة الأولى و مفهوم عملية الربط نحوياً و ذكر بعض الأساسيات.



    سنكمل لاحقاً إن شاء الله بمشاركات متفرقة لإيصال هذا المفهوم بالكامل من الألف إلى الياء, بأوقات فراغي

    إعداد و شرح خيتكم
    رغــد
    طبعاً هنيك كم حرف مترجمتن من بعض المراجع
    :happy:
    الملف المصدري للبرنامج موجود بالمرفقات
    سبب التعديل: إضافة الملف المصدري للبرنامج

     
    ملف مرفق(ملفات)
     
    ملف مرفق  main.rar (528بايتات )

    كلمات مفتاحية  :

    تعليقات الزوار ()