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

المرحلة 1:
تتمثل الخطوة الأولى في إنشاء فئة واجهة موروثة من QObject ، حيث سيكون هناك واجهة تأخذ متغيراً من النوع QString وتُرجع السلسلة نفسها في الحالة العليا. باستخدام الماكرو Q_DECLARE_INTERFACE ، قمنا بتعيين معرف الواجهات ، ويقوم المترجم c بإنشاء معلومات التعريف لسلسلة المعرف. هذه الوحدة هي بروتوكول الاتصال بين البرنامج المساعد والبرنامج الرئيسي وسيتم استخدامه في مشروع البرنامج المساعد والمشروع الرئيسي.
سيبدو الفصل على النحو التالي.
المرحلة 2:
لنقم بإنشاء تطبيق أساسي لتنزيل الامتداد. بالضغط على الزر ، سيتم البحث عن الامتداد وتحميله في النظام. كذلك من خلال الواجهة سوف نستخدم وظيفتنا.
التطبيق الأساسي:
mainproject.h
mainproject.cpp
المرحلة 3:
عند إنشاء ملحق ، فإن أول ما يجب فعله هو تغيير نوع المشروع الذي تم إنشاؤه في الملف pro ، لذلك تحتاج إلى إضافة السطر التالي TEMPLATE = lib ، وتعيين تكوين المشروع لملحق CONFIG + = plugin.
upperstringplugin.pro
#------------------------------------------------- # # Project created by QtCreator 2019-04-03T11:35:18 # #------------------------------------------------- QT += core greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = upperStringPlugin TEMPLATE = lib CONFIG += plugin DESTDIR = ../Plugins DEFINES += QT_DEPRECATED_WARNINGS CONFIG += c++11 SOURCES += \ upperstringplugin.cpp HEADERS += \ upperstringplugin.h \ interface.h
بعد ذلك ، نقوم بإنشاء فصل للامتداد المستقبلي ، يجب أن يتم وراثة الفئة من فئة الواجهات. ماكرو Q_INTERFACES ، تحتاج إلى برنامج التحويل البرمجي لإنشاء كافة معلومات التعريف الضرورية للملحق . يعين الماكرو Q_PLUGIN_METADATA () نقطة الإدخال إلى الملحق والوصول إلى مكتبة Qt. تحتاج أيضًا إلى إنشاء ملف inteface.json مع معلومات التعريف (يجب أن يكون الملف في جذر المشروع) ، وفي حالتنا لا توجد معلومات هناك ، لذلك اكتب علامات اقتباس فارغة {} في الملف.
upperstringplugin.h
upperstringplugin.cpp
عند إخراج ترجمة المشروع ، نحصل على ملف بالملحق. لذا ، ننقل هذا الملف إلى مجلد الإضافات الخاص بالمشروع الرئيسي ، ونبدأ تشغيله. في هذه الحالة ، يتم تحميل الملحق في البرنامج الرئيسي ويتم إنشاء كائن ملحق واحد. إذا حاولت إعادة استخدام وظيفة مثيل () ، فستقوم الدالة بإرجاع مؤشر إلى كائن الملحق الذي تم إنشاؤه بالفعل.
تنفيذ البرنامج

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

المرحلة 1:
سيكون لواجهة الواجهة الأولى وظيفتان ، الحصول على اسم البرنامج المساعد والحصول على عنصر واجهة المستخدم المساعد. سيتم تخزين اسم البرنامج المساعد لتحديد الهوية في النظام. سنضيف عنصر واجهة المستخدم المساعد إلى نوافذ MDI للتطبيق الرئيسي.
الفئة الثانية هي القطعة الرسومية نفسها ، فهي موروثة من QWidget ، وهنا حددنا الوظائف التي نحتاجها ، وسوف تتلقى القطعة رسالة وإرسالها إلى البرنامج الرئيسي.
interface.h
المرحلة 2:
يتكون البرنامج الرئيسي من نافذة MDI ، حيث يوجد عنصر واجهة رئيسية لتلقي الرسائل من الإضافات والنوافذ الإضافية التي تظهر ديناميكيًا كما تسمى الإضافات.
عند إنشاء عنصر واجهة مستخدم إضافي ، نقوم بتوصيل الإشارة من المكون الإضافي إلى الفتحة وباستخدام وظيفة المرسل () نحصل على مؤشر إلى المكون الإضافي الذي أرسل الرسالة. نضع عنصر واجهة المستخدم الذي تم إنشاؤه في نافذة MDI ، ويمكن إلغاء تحميل كائن المكون الإضافي نفسه من النظام.
mainproject.h
mainproject.cpp
النافذة الرئيسية تقبل الرسالة وتعرضها.
mainwidget.h
mainwidget.cpp
المرحلة 2:
نقوم بإنشاء مكون إضافي ، فكرته هي أنه مصنع لإنشاء عنصر واجهة مستخدم.
plugin.h
plugin.cpp
القطعة التي أنشأتها البرنامج المساعد.
texttranferwidget.h
texttranferwidget.cpp
مخرجات البرنامج الرئيسي:
