السلام عليكم و رحمة الله و بركاته
لا يزال السؤال الذي يدور في أذهان الكثير من عشاق ++C : مالسبيل إلى برمجة الواجهات الرسومية !؟
في هذه المقالة سأحاول أن أجيب على هذا السؤال من خلال التطرق لأشهر مكتبات الــ GUI في السي++.
الفهرس
- هل توجد مكتبات GUI لـــ ++C ؟
- Microsoft Visual C++ and MFC
مالفرق بين ++C و ++VC ؟
الــ ++VC هو الوحيد في هذا المجال ؟
أشهر البرامج التي كُتبت بــ ++VC
الإيجابيات و السلبيات
ما هي MFC ؟
إيجابيات و سلبيات الـــ MFC - C++ Builder and VLC
نبذة تاريخية
ما هي VCL ؟
البرامج التي كُتبت في بيئة C++ Builder - wxWidgets
ما هي wxWidgets ؟
نبذة تاريخية
الترخيص
السلبيات
المميزات
برامج تستخدم wxWidgets - Framework QT
ما هي QT ؟
نبذة تاريخية
Modules
إصدارات QT
مميزات QT
أشهر البرامح المكتوبة بــ QT - الخاتمة
هل توجد مكتبات GUI لـــ ++C ؟
نعم, توجد عدة مكتبات C/CPP لبناء الواجهات الرسومية, بعضها متعدد المنصات و بعضها الآخر يعمل على نظام تشغيل واحد فقط, المكتبات الأشهر هي :
Microsoft Foundation Classes – MFC
Visual Component Library – VCL
wxWidgets
Qt
Microsoft Visual C++ and MFC
مالفرق بين ++C و ++VC ؟
++C هي إحدى اللغات البرمجية العالية المستوى, صُممت لتدعم بشكل مباشر أنماط برمجية متعددة :
Procedural programming, Object-oriented programming, Generic programming
السي++ هي اللغة الأفضل لتصميم التطبيقات ذات الواجهات المعقدة، وللتعامل مع البنية الصلبة للحاسوب وذلك لسرعتها في التنفيذ والتي ورثتها عن أمها الحنون : السي.
بالإضافة إلى ما سبق, يعتبر البعض أن مشكلة السي++ هي أنها تعطي للمبرمج الخيار حتى لو كان اختياره غير صحيح (خصوصا في قضايا إدارة الذاكرة : حجز/تحرير/تسرب, ..) إلا أن أصحاب اللغة ينظرون إلى هذه الأمور باعتبارها دليل على حرية المبرمج و عدم التضييق عليه, و يقولون أنها إحدى مميزات السي++ التي تنفرد بها عن بقية اللغات ..
بالسبة لــ Microsoft Visual CPP فهو عبارة عن IDE أي بيئة تطوير متكاملة (Integrated Development Environment) و سُميت كذلك لأنها تساعد المبرمج في كل من التحرير, الترجمة و الربط, ففي السابق كانت الترجمة و الربط يتمان على شكل أوامر ! أما في الـ IDE فأصبحت عملية الربط و الترجمة تتم عن طريق الضغط على زر واحد من لوحة المفاتيح و بالتالي بيئة التطوير هي من يقوم بتنفيذ هذه الأوامر بدلا منك.
إذا, MSVC ليس لغة برمجة ..
الــ ++VC هو الوحيد في هذا المجال ؟
لا, ليس الوحيد و لكنه عملاق الساحة !, يقول الخبير Scott Meyers في سلسلة مقالاته البرمجية الشهيرة The most important ever :
إن مترجم مايكروسوفت منذ عام 92 هو أحد أسباب تطور لغة ++C ولو جمعنا كافة مبرمجي ++C في الكرة الأرضية ثم سألناهم عن المترجمات التي يستخدمونها في إنجاز أعمالهم فستكون الإجابة لدى الغالبية الكبرى هي مترجم مايكروسوفت, لذلك يشتبه على الكثير من المبتدئين الفرق بين لغة ++C و بين ++VC كبيئة تطوير.
في إصداراته حتى عام 98 لم يكن VC يلتزم بالمعايير لأنه لم يكن هناك معايير أصلاً, المعايير ظهرت في عام 98 قبيل إصدار VC 6 بقليل, و المعايير تحتاج إلى وقت ليس بالقصير لتبنيها من قبل مصنعي المترجمات وقد حلت معظم مشاكل التوافق مع المعايير منذ عام 2003.
أشهر البرامج التي كُتبت بــ ++VC
- حزمة الأوفيس (Microsoft Office) بجميع إصداراتها.
- النسخة التي تعمل على الويندوز من برنامج MathType (كُتبت بلغة C).
- معظم برامج Windows الناجحة كُتبت بــ VC++.
السلبيات و الإيجابيات
سلبياته : يعمل على الـ Windows فقط !, كبير الحجم و بطئي شيئا ما !!, غير مجاني أيضا.
إيجابياته : يوفر العديد من الأدوات التي تُسهل عمل المبرمج (مثل برمجة الشبكات, الاتصال بقواعد البيانات, …) كما يحتوي على Debugger قوي جدا !
ما هي MFC ؟
مكتبة MFC هى اختصار لـــ The Microsoft Foundation Class وهى مكتبة تتكون من مجموعة من أنواع البيانات (data types) والدوال (functions) والفئات (classes) والثوابت (constants), تُستخدم عادة في إنشاء التطبيقات التي تعمل على عائلة نظام التشغيل ويندوز .
إيجابيات و سلبيات الـــ MFC
الإيجابيات : الـ MFC قريبة جدا من نظام التشغيل, قوية, سريعة, خفيفة, تستهلك ذاكرة أقل.
السلبيات:
- مشاكل في دعم و تسيير اليونيكود (management unicode).
- التوثيق ضخم لكن غير منظم (bloated, but not structured).
- استخدام الــ event loop (messages) بدلا من Callback /Listener.
- وجود طبقة كائنية التوجه (object-oriented wrapper) تسمح بالوصول إلى API Windows المكتوبة بــ C.
C++ Builder and VLC
ما هو C++ Builder ؟
C++ Builder عبارة عن RAD قامت بتصميمه شركة Borland حيث يعتمد على نفس المفاهيم, الواجهة و المكتبة الـمُستخدمة مع Delphi. يسمح CB بإنشاء تطبيقات Win32 سريعة كما يُوفر واجهة رسومية أنيقة و سهلة أيضا وهو مُتوافق مع ISO CPP.
نبذة تاريخية
بدأ C++ Builder حربه الشرسة مع الــ VC في تسعينيات القرن الماضي, حيث أطلقت شركة Borland أول نسخة من CB في عام 1997. بالرغم من أن تلك النسخة لم تُشكل خطرا يُذكر على MSVC إلا أن ذلك لم يقف عائقا دون إصدار نسخ جديدة من الـــ Builder حيث توالت النسخ تباعا .. وصولا إلى C++ Builder 6.
عندما أعلنت ميكو عن Microsoft Visual Studio قامت شركة بورلاند أيضا بحركة مماثلة حيث أعلنت عن المنافس الجديد Borland Developer Studio, في عام 2007 تولى فرع Code Gear (التابع لشركة بورلاند) برمجة و تطوير BDS. شهد عام 2008 بيع فرع كود جير إلى شركة Embarcadero قبل أن يتم إصدار نسخة CB9 التي تعتبر من أقوى نسخ C++ Builder و أكثرها أمنا, سرعة و ثباتا.
الجدول التالي يحتوي على أرقام نسخ CB منذ بدايته و حتى الآن :
ما هي VCL ؟
الـــ VCL اختصار لـــ Visual Components Library وتعني مكتبة المكونات المرئية, عبارة عن إطار كائني التوجه مكتوب بلغة الـــ Object Pascal, من ضمن المكتبات الرسومية الموجهة إلى سي++, نجد أن VCL هي الوحيدة الغير مكتوبة بــ C++), تتميز VCL بسهولة VB و قوة VC. الشيء الذي جعلها تخطو خطوات إلى الأمام لتأخذ مكانا متقدما في لائحة البكتبات الرسومية. ابتداء من 2009, أصبحت VCL تدعم اليونيكود بشكل ممتاز حيث يمكن التعامل مع ملفات ذات أسماء non-ANSI لذا تجد أنه تمت إضافة فئات جديدة من أجل حل مشكلة ترميز Unicode.
المبرمجون الذين انتقلوا من MFC إلى VCL يُدركون جيدا أن إنشاء الواجهات في C++ Builder سهل جدا لأنه يستخدم VCL وهي أسهل بكثير من MFC.
المكتبة المكافئة لــ VCL في Linux هي LCL و التي تعرف اختصارا بــ Lazarus Component Library, هذه الأخيرة متعددة المنصات وهي متوافقة 100% مع VCL.
البرامج التي كُتبت في بيئة C++ Builder
كُتب بها البرنامج الشهير WinRAR و المنقح المعروفIDA Pro وOllyDbg أيضا, بالإضافة إلى برنامج Magic ISO الذي يُستخدم للتعامل مع ملفات ISO لنسخ أقراص CDROM وحرقها دون أن ننسى العملاق Panda Titanium Antivirus و اللائحة تطول:
- ImgBurn
- Audiograbber
- GoldWave
- Clone CD
- Norton PartitionMagic
- Easy CD-DA Extractor
- AVS Video Tools
- …
wxWidgets
ما هي wxWidgets ؟
wxWidgets كانت تُسمى wxWindows و لكن تم تغيير الاسم بعد أن تقدمت Microsoft بشكوى ضد الإسم القديم, wxWidgets عبارة عن مكتبة رسومية حرة و متعددة المنصات, تتكون من مجموعة أدوات لإنشاء واجهات رسومية يتغير شكلها تبعا لنظام التشغيل و هذا ما يُميزها عن بقية المكتبات المنافسة.
تملك wxWidgets دعم صناعي عريض, حيث تضم قائمة المستخدمين AOL و AMD و CALTECH و Lockheed Martin و NASA و مؤسسة تطبيقات المصادر المفتوحة و Xerox و آخرون كُثر.
المكتبة الأصلية مكتوبة بــ C++ لكن هذا لم يمنع من وجودة مجموعة Bindings للغات برمجية أخرى, مثل :
Python – wxPython
Perl – wxPerl
BASIC – wxBasic
Lua – wxLua
OCaml – wxCaml
JavaScript – wxJavaScript
Java – wxJava ou wx4j
Ruby – wxRuby
Eiffel – wxEiffel
Haskell – wxHaskell
C#/.NET – wx.NET
Euphoria – wxEuphoria
D – wxD
بعض هذه المكتبات أكثر تطورا من غيرها, لكن تبقى المكتبات الأكثر شعبية هي wxPython, wxPerl and wxBasic.
نبذة تاريخية
بدأت مكتبة wxWidgets و التي كانت تسمى wxWindows في 1992 في معهد تطبيقات الذكاء الاصطناعي بجامعة إدنبرغ بواسطة جوليان سمارت عندما كان يعمل على أداة رسم بياني أطلق عليها Hardy ، لم يرغب في الاختيار بين نشرها على منصات صن أو الحواسيب الشخصية ، فلذا قرر أن يختار أطار عمل متعدد المنصات . كانت الأدوات التجارية متعددة المنصات قليلة جدا ، فضلا على أن المعهد لا يملك الميزانية الكافية لها على أية حال ، لذا كان الخيار الوحيد هو بناء أداة متعددة المنصات، و في سبتمبر 1992 سمح الجامعة لجوليان أن يرفع الإصدار الأول من مكتبته على موقع ال FTP للجامعة. مكتبة wxWidgets (حرف w من Windows و x من X خادم النوافذ في اليونكس ) بدأت بدعم Xview و MFC 1.0 . بعدما أصبح واضحا أن XView قد بدأ عصره بالذهاب، كتبت نسخة wxWidgets لمنصة Motif . بدأ مستخدمو ++ Borland C بطلب نسخة لا تعتمد على MFC ، لذا نسخة الويندوز أعيدت كتابتها لتستخدم دوال API الويندوز الأصلية. [المصدر : وادي التقنية]
مع الوقت، بدأ بالظهور مجتمع صغير لـ wxWidgets ولكن متحمس، و أعدت القوائم البريدية. المشاركات و الإصلاحات بدأت بالإرسال إلى المشروع الجديد، كانت أكبر المشاركات هي نسخة Mac و Xt. بدأت مكتبة wxWidgets بشكل تدريجي باستقطاب المزيد والمزيد من المستخدمين من شتى أنحاء العالم: التجاري ، و الحكومي و مستخدمين الشركات – معظمهم راضين – الذين وجدوا أن wxWidgets توفر منتج أفضل و دعم أفضل من المنتجات التجارية التي نظروا إليها أو استخدموها.
خلال 1995 ، أصدر ماركوس هولزم نسخته من wxWidgets إلى منصة Xt وهي مجموعة أدوات X . هذا عنى أن البرمجيات يمكن أن تكتب و تعمل على أنظمة X من دون الحاجة إلى تثبيت Motif التي هي منتج تجاري.
في 1996 ، ركد مشروع wxWidgets قليلا. غادر جوليان معهد تطبيقات الذكاء الاصطناعي ليتفرغ إلى أعمال الاستشارة الحرة، وكانت هناك القليل من الإصدارات. على ما يبدو أن تقدم جافا غير المتوقف ألقى بعض الشك على مميزات مكتبات ++C . بعد عدة مشاركات ، أصبح كود wxWidgets بالأحرى متعب وبحاجة إلى إعادة تفكير جدية. في بداية عام 1997 ، بدأ التفكير جديا بإعادة هندسة wxWidgets مع دوال API مرنة بما فيه الكفاية لواجهات المستخدم الحالية والمستقبلية، مع المزيد من الأدوات و استخدام أفضل لـ ++C. بعد تداول الحوارات بين جوليان سمارت و ماركوس هولزم ( مؤلف نسخة Xt) كان هناك القرار الجدير بالاهتمام. جوليان سيكتب نسخة الويندوز و ماركوس سيجمع نسخة Motif و Xt ، وسيتشارك كلاهما في الأجزاء العامة. أفكار دوال wxWidgets 2 بدأت بالتشكل و بدأ العمل على كتابتها.
خلال 1997 بدأت في الظهور فكرة إنتاج بيئة سطح مكتب قياسي للينكس (GNOME) . هذه البيئة تعتمد على +GTK التي بنيت فوق X11، و بالرغم ذلك فإن التطبيقات المبنية على +GTK ستصبح قياسية لعالم اللينكس. كانت هناك مشكلة واحدة رئيسية، +GTK مبنية على لغة السي، ويوجد لها تغليف بسيط لـ ++C ( وغير قابل للنقل). في أغسطس 1997 ، قدم والفرام جلوجر اقتراح بأن wxWidgets2 يجب أن تنقل إلى +GTK. كان لروبرت روبلينج تحفظات أولية على الفكرة، ولكن في العموم هو داعم للفكرة. أصبح المحرك الرئيسي لـ wxGTK ، ونسخة اﻷلفا أصبحت متوفرة في بداية 1998. في مارس 1998 دمجت نسخة الويندوز و +GTK و وضعت في مستودع CVS وأصبحت متوفرة لجميع المساهمين لـ wxWidgets. في تلك الأثناء، أصبح فاديم زيتلين مطور نشطا في wxWidgets، وأعد معظم نشاط المطورين.
في بداية 1998 ، انقطع ماركوس هولزم عن wxWidgets2 و لكن جوليان سمارت بدأ نسخة wxMotif جديدة. فكرة نسخة Xt أبعدت، بعد أن توفر احتمالين للبرمجة اليونكس مجانية مع wxWidgets: أولا مكتبة wxGTK و wxMotif مع نسخة Motif المجانية Lesstif.
في سبتمبر 1998 ، بدأ ستيفن سومور نسخة جديدة من wxMac 2 مبنية في جزء منها على عمل جريج وايتهد المبدئي.
ظهرت wxWidgets 2.1.11 مصحوبة بصفوف wxHTML الرائعة من عمل فاكلاف سلافيك ، مع تحسينات لاحقة تشمل القدرة على الطباعة ومعاينة ، و تطبيق helpview و صف متحكم المساعدة لنظام المساعدة HTML متعدد المنصات. أعطى wxHTML التطبيقات وصول سهل إلى عرض النص المنسق و قابلية التقارير.
شهد منتصف 2000 إطلاق wxDesigner ، محرر الحوارات و أداة التطوير السريع من عمل روبرت روبلينج التي امتلكت انتشار واسعا. أيضا شهدت عام 2000 بداية wxUniversal وهي عبارة عن مجموعة من الأدوات للمنصات التي لا تمتلكها، لأن بعض المنصات تمتلك أدوات لا تمتلكها المنصات الأخرى. كتب wxUniversal بشكل أساسي فادم زيتلين و موله شركة تطبيقات SciTech ، وهي أيضا التي قامت بتمويل فاكلاف سلافيك لكتابة نسخة إلى منصتهم MGL .
في يوليو 2000 انضم جوليان سمارت إلى إدارة ردهات كامبردج في بريطانيا، وغادرها في فبراير 2002 ليتابع منتجاته عندما قررت ردهات إيقاف مشروع eCos الهادف إلى إنشاء نظام تشغيلي مضمن.
من أواخر 2001 إلى منتصف 2002 ، قام جوليان سمارت و روبرت روبلينج بإضافة نسخة wxX11 باستخدام أدوات wxUniversal ، وهذه النسخة تتطلب فقط نظام اللينكس و خادم X11، وهي مناسبة لأي بيئة لينكس تستخدم مواصفات بسيطة من المساحة. في أكتوبر 2002 نجح روبرت روبلينج ببناء نسخة wxX11 لنسخ اللينكس المألوفة التي تعمل على iPAQ. روبرت نجح أيضا في امتلاك wxGTK تعمل بـ +GTK مع دعم اليونيكود ، فاتحا بذلك إلى wxWidgets أسواقا جديدة.
في يوليو 2003 بدأت wxWidgets بالعمل على Windows CE ، و أثبت روبرت روبلينج أن تطبيقات wxGTK تعمل على GPE منصة اللينكس المضمنة.
نسخة OS/2 بواسطة دايفد ويبستار و ستيفان نيس تطور بشكل بطيء ولكن ثابت خلال سنوات الماضية.
في فبراير 2004 ، أعلن جوليان سمارت أن اسم المشروع سيغير اسمه إلى wxWidgets بدلا من wxWindows ، كنتيجة لضغط شركة مايكروسوفت عليه لاحترام العلامة التجارية ” Windows “ المسجلة لدى مايكروسوفت في فرع المملكة المتحدة.
ويخطط لإصدار wxWidgets 3 مع بداية 2008 حيث تركز أكثر شيء على دعم اليونيكود بشكل واسع مع تطوير الدوال و تسهيل استخدامها.
ترخيص wxWidgets
توزع مكتبة wxWidgets تحت ترخيص مخصص ، مشابه إلى GNU Lesser General Public License – الذي يسمح باستغلالها لكتابة برامج حرة وتجارية معا – مع استثناء أن وضع العمل المشتق منها في صغيته الثنائية يمكن أن ينشر تحت شروط المستخدم الخاصة. هذا الترخيص هو ترخيص برامج الحرة ، ويجعل wxWidgets برنامجا حرا.
سلبيات wxWidgets
لكل مكتبة سلبيات و مكتبة wxWidgets لا تخلو منها ، وهذه أهمها:
- ضعف في المكونات الرسومية التجارية لصنع شبكات رسومية جميلة و لصنع الرسوم البيانية، ولكن يمكن إلقاء نظرة على wxCode .
- لا يوجد دعم لثيمات ، ما لم تستخدم wxUniversal أو wxSkin.
- منصة wxX11 لا تقارن بالمكتبات الآخرى و غير مستقرة. يجب عليك استخدام wxGTK بدلا منها، وتبني تطبيقاتك على GTK بدلا عن X11 مباشرة. منصة wxX11 غالبا تستهدف إلى الأجهزة المضمنة والتي لا تملك GTK.
- تحاول wxWidgets أن تدعم طاقم المميزات مكلفة ، وكنتيجة بعض المكونات قليلة الاستخدام ليست مستقرة أو لا يعتمد عليها بالمقارنة بالمكونات العامة. ومثلما مع كل مكتبة أدوات مفتوحة المصدر ، الاختبارات المعمقة أفضل حل هنا.
- بالنسبة للغة العربية فإنها لا تدعم تغيير اتجاه البرنامج من اليمين إلى اليسار بشكل جيد ، بالرغم أن المكتبات الأصلية تدعم هذه الخاصية.
- تطورها بطيء نوعا ما وهذا ما يعيقها عن الإنتشار الكامل.
مميزات wxWidgets
- مكتبة wxWidgets لا فقط على ++C ، ولكنها أيضا تملك جسورا إلى بايثون و بيرل و جافا و إيفيل و سي شارب (الدوت نت ) و البيسك و روبي و lua و حتى جافا سكربت. مما يسهل عملية البرمجة بها لمن لا يعرفون لغة ++C
- تعتبر أحد المكتبات أدوات GUI المكتملة، وتملك العديد من الصفوف الخدمية.
- تمتلك توثيقا جيدا .
- مجانية للاستخدام الشخصي و التجاري معا.
- كلما أمكن تستخدم مكتبة wxWidgets منصة التطوير الأصلية. وهذا يعني أن البرنامج إذا بني على الويندوز سيأخذ مظهر و سمة برامج الويندوز و عندما يبنى على منصة اللينكس سيأخذ مظهر وسمة برامج اللينكس.
برامج تستخدم wxWidgets
- Poedit: برنامج لترجمة ملفات PO التي تستعمل في برامج اللينكس بكثرة.
- Xara Xtreme : برنامج لرسوميات المتجهة وهو نسخة خاصة باللينكس.
- AOL Communicator : برنامج عميل الانترنت المشهور
- Audacity : برنامج تحرير الصوتيات و المقاطع الصوتية
- Kirix Strata : برنامج قواعد بيانات دينامكي
- Chandler : برنامج الجدولة والمواعيد مشابه جدا لبرنامج أوتلوك.
- Code::Blocks : بيئة التطوير المعروفة.
- مشغل الملتيمديا المشهور VLC قبل أن ينتقل إلى QT في عام 2008.
Framework QT
ما هي QT ؟
QT عبارة عن بيئة رسومية جميلة و التعامل معها سهل جدا, تمت كتابتها بــ C++ من طرف Qt Development Frameworks. تتميز هذه المكتبة بالسرعة و تعدد المنصات. لكي تعمل على بيئة QT يجب أن تكون ملما بأساسيات الـــ OOP و هذا طبيعي جدا لأن QT عبارة عن Object-Oriented Framework.
Qt متوفرة تحت نوعين من الرخص: رخصة خاصة (مدفوعة الثمن) للبرامج المغلقة ورخصة الـ LGPL من أجل معظم أنظمة التشغيل (Windows, Unix with X11, Linux MacOS,…)
صُممت QT أساسا لـ C++ لكن لم يمنعها هذا من التوسع إلى لغات أخرى مثل Python, PHP, Ruby, C, Perl, C#, Java.
نبذة تاريخية
منصة العمل Qt أصبحت متوفرة للعامة في مايو 1995. لقد طورت مبدئيا من قبل هافارد نورد (المدير التنفيذي لشركة Trolltech) و إيريك شامبنج ( رئيس شركة Trolltech ) . هافارد و إيريك اجتمعا في معهد النرويجي للتكنولوجيا في تروندهايم ، حيث تخرج كلاهما بشهادة الماجستير في علوم الحاسوب. [المصدر : وادي التقنية]
يعود اهتمام هافارد في تطوير واجهة المستخدم الرسومية GUI باستخدام ++C لعام 1988 عندما كلف بواسطة شركة سويدية بتطوير منصة عمل GUI متوافقة مع ++C. بعد سنتين وفي صيف 1990 عمل هافارد وإيريك معا في تطبيق قاعدة بيانات ++C لصور الأشعة فوق السمعية. النظام تطلب أن يكون قادرا أن يعمل بواجهة رسومية للمستخدم ويعمل على منصات اليونكس والماكنتوش و الويندوز. في أحد أيام ذلك الصيف ذهب هافارد وإيريك للخارج للاستمتاع بشروق الشمس و لما كانا جالسين مقعد الحديقة ، قال هافارد : ” نحن بحاجة إلى نظام عرض كائني المنحى.” نتيجة النقاش خلصت إلى قاعدة عقلانية لمنصة عمل رسومية متعددة الأنظمة وكائنية المنحى يجب أن يبدؤوا حالا في بناءها.
في عام 1991 ، بدأ هافارد بكتابة الصفوف التي في النهاية أصبحت Qt ،بالتعاون مع إيريك في التصميم. في السنة اللاحقة، أتي إيريك بفكرة ” signals and slots” بالعربي ” الإشارات والمستقبلات” ، بسيطة و لكن نموذج برمجة واجهة رسومية GUI قوية ، والتي تبنتها عدة أدوات برمجية أخرى. أخذ هافارد الفكرة و أنتج تطبيق مكتوب. في عام 1993 هافارد وإيريك طوروا أول نواة رسومية و استطاعوا إعداد مكوناتهم الخاصة. مع نهاية السنة ، اقترح هافارد بأن يدخلوا في العمل معا لبناء ” أفضل منصة عمل رسومية مكتوبة باستخدام ++C في العالم”.
بدأ عام 1994 بشكل عاثر مع مبرمجين صغار يريدون دخول سوق راسخ ، من دون زبائن ومنتج غير مكتمل و بدون أموال. لحسن الحظ ، كانتا زوجاتهما تعملان ، ولذا استطاعن أن يدعمن أزواجهن للسنتين التي توقعهما إيريك وهافارد بأنهما بحاجة لهما لتطوير المنتج و البدء باكتساب عائدات.
حرف ” Q” اختير كبادئة للصف بسبب أن الحرف يظهر جميلا في خط إيماكس هافارد. وحرف “t” أضيف لاختصار ” toolkit” اشتقاقا من Xt والتي تعني X Toolkit . أعلن عن الشركة في 4 مارس من عام 1994، في الأصل كـ Quasar Technologies ثم كـ Troll Tech و اليوم كـ Trolltech.
في أبريل 1995 ، يعود الفضل إلى أحد أساتذة هافارد الجامعيين إلى حدوث تواصل بالشركة النرويجية Metis التي أعطتهم عقد لتطوير برمجيات معتمدة على Qt. في ذلك الوقت ، استأجرت ترولتك أرنت جولبراندسن الذي خلال ست سنواته في ترولتك أبدع و أعد نظام توثيق مبتكر ، بالإضافة إلى المشاركة في كود Qt.
في 20 مايو 1995 رفعت Qt 0.90 إلى سيرفر sunsite.unc.edu. بعد ستة أيام ، أعلن عن اﻹصدارة على comp.os.linux.announce. كانت هذه أول إصدارة عام من Qt. كيوتي يمكن أن تستخدم لتطوير كلا النظامين الويندوز واليونكس و تقدم نفس الدوال API في كلا المنصتين. Qt توفرت تحت ترخيصين من اليوم الأول: الترخيص التجاري والذي يستخدم للتطوير التجاري و نسخة البرنامج المجانية تحت ترخيص FreeQt للتطوير البرمجيات مفتوحة المصدر. العقد مع شركة Metis ترك ترولتك عائمة ، خلال عشرة أشهر طوال لا أحد اشترى الترخيص التجاري لـ Qt.
في مارس 1996 ، أصبحت وكالة الفضاء الأوربية الزبون الثاني لدى Qt بشراء عشرة تراخيص تجارية. مع رباطة الجأش ، استأجر إيريك وهافارد مطور آخر. أطلقت اﻹصدارة Qt 0.97 بنهاية مايو وفي 24 سبتمبر 1996 ظهرت Qt 1.0 إلى النور. مع نهاية السنة ، وصلت Qt إلى اﻹصدارة 1.1 و ثمانية زبائن جدد ، كل من بلاد مختلفة اشتروا 18 ترخيصا تجاريا فيما بينهم. وفي هذه السنة ظهر تأسيس مشروع KDE بقيادة ماتثياس إيتراك.
أصدرت Qt 1.2 في أبريل 1997. كان قرار ماتثياس إيتراك باستخدام Qt لبناء KDE ساعد Qt لأن تصبح معيار واقعي لتطوير الواجهات الرسومية باستخدام ++C في اللينكس. اﻹصدارة 1.3 ظهرت في سبتمبر 1997.
في عام 1998 انفجر خلاف بعدما أصبح واضحا أن KDE ستكون المسيطرة على أسطح المكتب في اللينكس ﻷن رخصة FreeQt لم تكن تتوافق مع فلسفة المصادر الحرة مع أنها كانت مفتوحة المصدر ، وبما أن KDE مبنية على Qt ، فإن الكثير من الناس في حركة المصادر الحرة قلقوا بأن الجزء اﻷساسي من نظامهم التشغيلي يمكن أن يكون مملوكة وليست حرة.
وهذا أعطى دافعا ﻷمرين : مشروع مكتبة Harmony toolkit والتي هدفت إلى إنتاج نسخة مطابقة لمكتبة Qt تحت ترخيص البرمجيات الحرة، و الأمر الثاني و اﻷكثر أهمية مشروع سطح مكتب GNOME والذي هدف أساسا ﻹنتزاع مكانة KDE. سطح مكتب جنوم استخدم مكتبة أدوات GTK+ والتي في اﻷصل كتبت لبرنامج GIMP و تستخدم بشكل أساسي لغة السي للبرمجة.
في هذه اللحظة ارتكبت شركة ترولتك خطأ بعدم تعديل رخصة FreeQT لتكون متوافقة مع رخصة غنو العمومية ، وهي غلطة تمنى رؤساء ترولتك لو لم يقعوا فيها، ﻷنهم ضيعوا فرصة السيطرة على سطح المكتب في اللينكس و ظهر جنوم الذي دعمته شركة ردهات في اﻷساس ثم انتشر بشكل واسع حتى أصبح سطح المكتب المفضل لجمهور واسع من مستخدمي اللينكس وخاصة بعد صدور توزيعة أوبنتو الشهيرة.
انضم ماتثياس إلى ترولتك في عام 1998، وآخر إصدارة رئيسية من Qt 1 ، الاصدارة 1.40 صنعت في سبتمبر من ذلك العام. أطلقت Qt 2.0 في يونيو 1999. Qt 2 امتلكت ترخيص مفتوح المصدر جديد ، ترخيص Q العام QPL ، والذي يتوافق مع تعريف المصادر المفتوحة، بعد إصدار QPL اختفى مشروع مكتبة Harmony toolkit ﻷنه لم يكن له داعي. في أغسطس 1999 ، فازت Qt بجائزة عالم اللينكس لأفضل مكتبة أو أداءة. و في ذلك الوقت ، أسست Trolltech Pty Ltd فرع أستراليا.
أطلقت ترولتك نواة Qtopia ( ثم أطلق عليها Qt المضمنة ) في عام 2000. لقد صممت للعمل في أجهزة اللينكس المضمنة ولتقدم نظام النوافذ الخاص بها كبديل خفيف عن X11 . كلا المنتجان Qt/X11 و نواة Qtopia قدّما تحت استخدام رخصة غنو العمومية ( GPL) بالإضافة مع الترخيص التجاري. مع نهاية 2000 ، أسست ترولتك فرعها في الولايات المتحدة الأمريكية و أطلقت أول إصدارة من Qtopia منصة التطبيق إلى الهواتف النقالة و المساعدات الشخصية PDA. فازت نواة Qtopia بجائزة عالم اللينكس كـ”أفضل حل لينكس مضمن” في عام 2001 و 2002 و حقق هاتف Qtopia نفس النتيجة في 2004.
في عام 2001 أطلقت Qt 3.0. توفرت Qt لمنصة الويندوز و الماكنتوش Mac OS X و اليونكس واللينكس ( سطح المكتب و المضمن ). قدمت Qt 3 24 صفا جديدا و تجاوز كودها 500000 سطر. كانتQt 3 خطوة كبيرة للأمام من Qt2 ، احتوت بشكل كبير تحسين التوطين و دعم اليونيكود، وأداة جديدة بالكامل لعرض النصوص وتحريرها، و صف للتعابير الاعتيادية المماثلة لبيرل. فازت Qt3 بجائزة ” جولت الإنتاجية” لتطوير البرمجيات في عام 2002.
في صيف 2005 أطلقت Qt 4.0. بحوالي 500 صف و أكثر من 9000 دالة وظيفية ، Qt4 أكبر و أغنى من أي إصدارة سابقة، وقد قسمت إلى عدة مكتبات لذا المطورين يحتاجون ربط برامجهم بالأجزاء التي يحتاجونها من Qt فقط. Qt4 متقدمة جدا على الإصدارات السابقة بتحسينات اشتملت على مجموعة جديدة فاعلة وسهلة الاستخدام من حاويات القوالب، و أدوات عرض ووحدات متقدمة ، و منصة رسم 2D سريعة ومرنة ، و صفوف تحرير وعرض النصوص اليونيكود قوية، وبدون ذكر الالآف من التحسينات الصغيرة في كل نطاق صفوف Qt. كانت اﻹصدارة Qt 4 أول إصدارة من Qt تتوفر بترخيصين التجاري ومفتوح المصدر لكل المنصات التي تدعمها.
أيضا في 2005 ترولتك فتحت مكتب ممثل لها في بكين لتقديم خدمات البيع و التدريب و الدعم الفني لـ Qtopia للزبائن في الصين و تلك المنطقة.
في هذه السنة وصلت أرباح الشركة ولأول مرة 6.7 مليون دولار. وبعدها في السنوات التالية أصبحت نسبة النمو في إيرادات الشركة 40 % وبشكل متوالي في سنوات 2006 و 2007 .
تملك ترولتك اﻻن أكثر 5000 زبون و تملك علاقات تجارية مع أكثر من 2000 شركة عالمية من بينها IBM و Adobe و Skype و Google و Shell وغيرها من الشركات.
في عام 2007 وصل عدد موظفي شركة ترولتك إلى 250 موظف في جميع أفرع الشركة في النرويج و ألمانيا و أمريكيا و الصين و أستراليا.
منذ انطلاق ترولتك، نمت شهرت Qt بدون انقطاع واستمرت في النمو لهذا اليوم. هذا النجاح انعكاس لكل من جودة Qt ومدى الاستمتاع أثناء استخدامها. في العقد الأخير ، نمت Qt من منتج يستخدم بواسطة فئة محددة تعرفه إلى منتج يستخدم بشكل يومي بواسطة الآلاف من الزبائن و عشرات اﻵﻵف من مطوري البرامج الحرة في كل أنحاء العالم.
في عام 2010, أطلقت شركة نوكيا الإصدارة 4.7 من منصة التطوير Qt متعددة المنصات لتصميم التطبيقات. هذه الإصدارة قدمت تقنية جديدة وهي Qt UI Creation Kit وهي تتيح إنشاء واجهات رسومية دينامكية بشكل أسهل وأكثر احترافية عن الطرق التقليدية.
هذه التقنية تتكون من ثلاثة أشياء:
– لغة QML وهي لغة مبنية مشابهه لجافا سكربت تستغل قدرات مكونات Qt لتمكين المطورين والمصممين للتعاون معا لإنشاء تجربة للمستخدم في التحريك والانسيابية.
– مكتبة QtDeclarative وهي تقدم كمحرك داخلي يقوم بترجمة QML إلى QGraphicsScene.
– تحسين Qt Creator لدعم وتحرير ملفات QML.
في التاسع من أغسطس 2012, وقعت شركة Digia اتفاقية مع شركة Nokia لنقل ملكية Qt مقابل 4,9 مليون دولار. في نفس الوقت, أعلنت Digia أنها تريد توسيع نطاق دعم QT ليشمل Windows 8 و Android و iOS.
Modules
تنقسم مكتبات Qt إلى عدة موديلات (Modules ), مثل :
- QtGui : و هو موديل خاص بالتعامل مع الواجهة, تستطيع من خلاله إضافة نوافذ, أزرار, رسائل, صور و ما إلى ذلك.
- QtOpenGL : و هو موديل خاص برسومات الثلاثية الأبعاد, يُستعمل في الألعاب, المحاكات و غيرها.
- QtSql : و هو موديل خاص بالتعامل مع قواعد بيانات SQL و تسييرها.
- QtNetwork : موديل خاص ببرمجة الشبكات و التعامل مع الإنترنت كتحميل الملفات, و رفعها
توجد موديلات أخرى للتعامل مع XML و غيرها الكثير ..
إصدارات QT
توجد أربعة أنواع من إصدارات QT :
- Qt Console نسخة التطوير الغير رسومي non-GUI.
- GUI Framework وهي موجهة لبناء واجهات التطبيقات الرسومية والشبكات وقواعد البيانات، يطلق عليها أيضا اسم Desktop Light.
- Full Framework وهي نسخة تجارية كاملة تحتوي على كل شيء.
- إصدار مفتوح المصدر بالكامل (Qt Open Source Edition)
.
كما توجد نسخ تجارية توقف تطويرها ولها دعم تجاري فقط مثل Qt Jambi الموجهة للجافا.
مميزات QT
- توفر أكثر من 500 فئة و أكثر من 9000 دالة تغطى كافة متطلبات السوق البرمجي.
- التوثيق الممتاز, لكافة الدوال والفئات, وسهل الاستخدام والبحث معا.
- الدعم الفني الرائع الذي يركز على الجودة المنتج.
- تعمل على جميع المنصات من دون الحاجة إلى تعديل الكود لكل منصة.
- كلا الترخيصين يوفر سورس مكتبة Qt بالكامل مما يسمح لك بالتعديل فيها لتتناسب احتياجاتك البرمجية المختلفة.
- وفرة البرامج مفتوحة المصدر المكتوبة بها مما يوفر لك مادة برمجية هائلة للتعلم والاستفادة منها.
أشهر البرامح المكتوبة بــ QT
هناك الكثير من التطبيقات التي بنيت بواسطة مكتبة Qt ، و هذه بعض أشهر الأمثلة :
- Adobe Photoshop Album برنامج لإدارة وترتيب الصور
- Doxygen منتج توثيق API
- Google Earth برنامج ثلاثي الأبعاد للخرائط العالم
- KDE سطح المكتب المشهور في عالم اللينكس
- KDELibs المكتبة التي بنيت عليها الآلاف من تطبيقات KDE مثل Amarok و K3b و KDevelop و KOffice
- Last.fm Player عميل سطح المكتب لإذاعة الإنترنت و موقع مجتمع الموسيقى
- Motorola A760 يستخدم Qtالمضمنة في واجهته الرسومية
- Opera متصفح الإنترنت
- Psi عميل الرسائل اللحظية لـ XMPP
- Scribus برنامج للنشر المكتبي
- Skype برنامج المحادثة الشهير, يُستخدم للتحدث عبر الويب P2P VOIP
- TOra أداة للتحكم بقواعد البيانات وخاصة أوراكل.
- VirtualBox برنامج لمحاكة اﻷجهزة يستخدم في العمليات التخيلية
- Xconfig أداة إعداد نواة اللينكس.
الخاتمة
إلى هنا أصل بك أخي القارئ إلى نهاية هذه الجولة السريعة, كنت أود وضع روابط فرنسية تحتوي على دورات و دروس مفصلة في كل مكتبة لكن تراجعتُ عن الأمر نظرا لأن أغلب أعضاء المنتدى يدرسون البرمجة بالإنجليزية فقط.
نظرا لطول المقالة, اكتفيتُ بأربع مكتبات رسومية. أعتذر للآنسة GTK التي لم نتطرق لها نظرا لضيق الوقت.
تحياتي.
مقالة جميلة و مفيدة 🙂
لكن لديا تعقيب صغير :p
لم تدكر سلبيات Qt و لا اضن انها غير موجود, مع اني لم اجد سلبية واحدة .
و هدا ليكون المقال محايد 🙂
شكرا لك أخ هاشم : )
لم أذكر سلبيات QT لأنها قليلة جدا مقارنة مع بقية المنافسين, عموما إليك بعض السلبيات ع السريع :
– QT تتطلب مساحة كبيرة في القرص الصلب من أجل الــ compilation خصوصا مع WebKit.
– QObject و QWidget ليسوا thread-safe
– QMake ليست دائمة التحديث.
طبعا, النقاط السابقة لها تبريراتها الخاصة لكن لا داعي لذكرها الآن حتى لا أحرق الرد ^_^
مقالة رائعة أخي SnaCkeR ، تشكر على المجهود الطيب.
لي بعض التعليقات على الرد السابق:
– ال Webkit مشروع منفصل وهو يعتبر third party لذلك في حالة عدم استخدامه ينصح بتعطيله أثناء عملية الترجمة ، كذلك تعطيل الأمثلة والديمو حتى يتم تسريع عملية الترجمة والربط،
– بخصوص QWidget والعديد من فئات كيوت هي ليستThread Safety نظرا لان ذلك يقلل من اﻷداء ، أيضا فئات الواجهات صممت للعمل في ال thread الرئيسي.
وبالطبع يمكن استخدام QMutex وغيرها لعمل ال serialized access.
– QMake قليلة التحديث نعم ، وايضا هناك undocumented feature ، والعديد من العيوب. لذلك يفضل الكثير نظام البناء CMake ، ومن تجربة بسيطة أجد أن CMake افضل واسهل في الإستخدام.
مقالة جيدة جدا ولكن من اين استطيع التعلم واكون ملم باللغة من كل نواحيها كي استطيع صنع تطبيقات
الcpp كبيرة جدا ولها مكتبات كثيرة واصدارات عديدة ماذا علي ان اتعلمة منهم فكل ما اصنعة يكون في نافذة dos
بصراحة من أفضل المقالات في السي بلس بلس.. وقد استفدت فعلاً من هذه المقالة..
أعتقد أنك كتبت مقالة محترمة تساعد الناس على الفهم الجيد ..
شكراً لك
أهلا بك, سُررت بمرورك : )
القادم أجمل إن شاء الله.
السلام عليكم ورحمة الله
الله يعطيك العافية مقالة ممتازة ومفيدة بإذن الله
لدي استفسار : بالنسبة لمكتبات GTK لم تذكر عنها سوى القليل , وأعرف أنها أيضاً من المكتبات المهمة لبناء التطبيقات بلغة C++
الحقيقة لست مبرمجاً بلغة C++ ولكن لدي اهتمام فيها نوعاً ما لذلك لم أقرر بعد اختيار المكتبة التي سأستخدمها (لدي مشروع قادم مع صديق ويريد بناؤه بلغة C++ 🙂 ) والغالب استخدم QT أو GTK مع الحاجة لوجود إصدارات لكل من نظامي ويندوز و لينوكس.
الأمر الآخر : لغة Visual Basic متميزة جداً من ناحية عملها على نظام تشغيل Windows بدون وجود أي مكتبات أو أدوات يجب تنزيلها مسبقاً. عند بناء تطبيق C++ باستخدام مكتبة QT يلزم تنزيل المكتبة مسبقاً (كما هو الحال مع Dot Net Framework) مع اختلاف الاستخدام طبعاً. هل يمكن بناء تطبيقات لها واجهات GUI باستخدام C++ بدون الحاجة لتنزيل مكتبات إضافية ؟ مثال ذلك Portable Apps
وشكراً لك
يمكنك جعل تطبيقك مجرد exe بدون اي مكتبات اضافيه ، ولكن سوف يكون حجم الexe كبير لأن كل اكواد المكتبات ستكون موجودة داخل التطبيق ، وهذه من ميزات كيوت انها تسمح لك Dynamic Building وسوف يكون مرفق مع برنامج كل dll اللازمة، أو static building وسوف يكون برنامجك لحالة فقط.
على كل لست ملزماً لتحميل كل dll في qt لبرنامجك ، ولكن هذا يكون على حسب برنامجك وقد تستخدم من 3 الى 6 ملفات في الغالب فقط.
هذه الأيام وجود متطلبات في برنامج لأي Framework لا يعتبر عائق على الاطلاق! فالتحميل يتم سريعاً أو يمكنك ارفافه مع الSetup ..
@Tareq
بالنسبه لموضوع ال qt و ال Portable apps .. هذا ما أعرفه و أتمنى من الأخ وجدي تصحيحى:
فإن ال qt لها dual license … نسخه مجانيه (أعتقد GPL2) … و الأخرى تجاريه
بالنسبه للمجانيه أعتقد أنه يتوجه عليك إستخدام مكتباتها ك static libs … أي يجب أن يتم نقلها مع برنامجك .. حيث أنه لن يكون هناك مكان مركزي لمكتبات qt بل سيكون كل برنامج يستخدم qt من التنزيل بمكتبات ال qt المطلوبه معه ..
على عكس النسخه التجاريه … فإنه سيتم وضعها في مكان مركزي في النظام … و بإمكان أكثر من برنامج من إستخدام نفس المكتبه و بالتالى تكون ديناميكيه …
كيوت تستخدم LGPL أيضا في النسخة المجانية منذ أعوام طويلة ، لذلك أصبحت الخيار المفضل للعديد من المطورين ، حيث أن رخصة GPL كانت تحدهم من إنشاء تطبيقات تجارية مغلقة المصدر. أما مع LGPL فيمكنك غلق المصدر وبيع تطبيقك دون خرق لبندوها.
أيضا يمكنك ربط تطبيقك مع مكتبات كيوت الديناميكية Dynamic libs سواءا أرفقتها مع تطبيقك في نفس المجلد ، أو استخدمت كيوت التي تأتي مع النظام دون أن تحتاج الى الرخصة التجارية.
أحد الأمثلة تطبيقات كيدي ، تستخدم كيوت (المجانية) التي تأتي مع سطح المكتب KDE ، كذلك تطبيقات Blackberry 10 تستخدم كيوت (المجانية) التي تأتي مع نظامها QNX ، والعديد من الأمثلة.
شكرا للتوضيح
رائع جدا وجميل مع اني لسه في بداية الدراسه الجامعيه بس انا عاوز اتعلم GUI ياريت بس لو في لنك لموقع يقدر يفيدني ويقدم لي Explanation ,Lessons او اي حاجه ممكن تفيدني عشان اتقنها
السلام عليكم ورحمة الله وبركاته
جزاك الله خيراً
هل يوجد مرجع تعليمي لبرمجة MFC في Microsoft Visual CPP2010
لماذا تريد ان تتعلم هذه التقنية الان؟ هل من سبب لذلك؟ لأنها قديمة للغاية.
جميل احسنت النشر
بليز والله العظيم لم افهم شيء، سؤال انا أريد تعلم لغة ++c, هل يمكنني أن ابرمج اردوينو بلغة ++c؟؟، ثانيا انا أريد صنع سيارة اتحكم بها عن بعد، هل يمكن برمجتها عن طريق c++ و كيف؟؟ و هل هناك بديل عن البرمجة مثلا في ما يخص مشروع السيارة الي اتحكم بها عن بعد؟؟؟
السلام عليكم ورحمة الله وبركاته
منذ زمن احاول تعلم لغة برمجة تلبي حاجتي
وقد قرأت الكثير من المصادر وشاهد العديد من الفيديوهات التعليمية ، لكنني لم استطع بذلك كتابة برنامج مثلا لمعالجة قاعدة بيانات مكتوبة بالعربي . ومما يثير استغرابي ان هناك من البرامج الكثيرة جدا والمعقدة ، موجودة بالاسواق وبالدوائر الرسمية ، وهذا شيء لا ينكر ، وسؤالي هو اين اجد هذه المعلومات حتى اصل الى هذه المرحلة واكتب برنامجا ولو صغير ، مثلا للبحث في كتب الشعر والادباء . ا على اقل تقدير تغيير ازرار الكيبورد برمجيا لتناول الفونت العربي ذات العلاقة .
هذا ولكم جزيل الشكر والامتنان
عمل كود برمجي بلغة السي بلاص بلاص يدير المواد التي تبيعها الشركة للزبائن وعمل حسابات مختلفة