البرمجة في كيو تي ج. لماذا أحب كيو تي ويجب عليكم جميعًا أن تحبوه أيضًا. مقدمة - مكتبة الرسومات كيو تي

09.07.2020

يعلم الجميع أن KDE يعتمد على مكتبة Qt، ولكن لا يعرف الجميع ما هي.

Qt عبارة عن مكتبة فئة C ++ عبر الأنظمة الأساسية لإنشاء واجهات المستخدم الرسومية (GUIs) من TrollTech. هذه المكتبة كائنية التوجه بالكامل، مما يجعل من السهل توسيع الإمكانيات وإنشاء مكونات جديدة. وهو يدعم عددًا كبيرًا من الأنظمة الأساسية، مثل Windows 95/98/NT/2000 وLinux وSun Solaris وHP-UX وDigital Unix وIBM AIX وSGI IRIX وغيرها الكثير. منذ ظهور الإصدار التجاري الأول من Qt في عام 1996، ظهرت عدة مئات من التطبيقات المعروفة حول العالم. التطوير الأكثر شهرة على أساس Qt هو مدير سطح المكتب لنظام X-Windows الذي يسمى، كما خمن الكثيرون بالفعل، KDE.

هناك نسختان من مكتبة Qt: مجانية ومدفوعة. نسخة مجانية تسمى كيو تي طبعة مجانيةمخصص لنظام Unix/X11 وتطوير المصادر المفتوحة فقط. تم تصميم Qt Professional Edition لتطوير البرامج التجارية.

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

  • آلية قوية للتواصل بين الكائنات باستخدام الإشارات والفتحات
  • آلية لإنشاء خصائص الكائنات التي لا يدعمها مترجم C++
  • دعم الأحداث ومرشحات الحدث
  • ترجمة السلسلة لدعم التدويل
  • دعم الموقتات الداخلية، والتي تسمح لك بدمج العديد من المهام لواجهات المستخدم الرسومية المستندة إلى الأحداث
  • الأشجار الهرمية للأشياء، وهي نوع من أشجار العائلة: "الجد الأكبر - الجد - الأب - الابن"، مخصصة لتنظيم التفاعل الداخلي بشكل "طبيعي"
  • المؤشرات "المحمية" التي يتم تعيينها تلقائيًا إلى NULL عند حذف الكائن المشار إليه

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

إكس غريب

يُسمح باستخدام المواد الموجودة على موقع Linux.HiTECH.BY مع الإشارة إلى المصدر.
يتم توزيع المواد تحت GNU/GPL.

المحاضرات والعمل المخبري

حسب المعدل:أنظمة التشغيل

حول الموضوع:بيئة البرمجة كيو تي

مكتمل:

طلاب المجموعة A-06-09

سميرنوف أندريه

ماروجين ميخائيل

1. المقدمة

2. التاريخ

3. التنمية البيئية

4. نطاق التطبيق

5.معلومات عامة

6.المكونات

7. بيئة التطوير

8. العمل مع كيو تي كرياتور

9.أمثلة

10. مهمة ل العمل المختبري

مقدمة

هناك أيضًا "ارتباطات" للعديد من لغات البرمجة الأخرى: Python - PyQt، Ruby - QtRuby، Java - Qt Jambi، PHP - PHP-Qt وغيرها.

يسمح لك بتشغيل البرامج المكتوبة بمساعدتها في معظمها الحديثة أنظمة التشغيلببساطة عن طريق تجميع البرنامج لكل نظام تشغيل دون تغيير كود المصدر. يشمل جميع الفئات الرئيسية التي قد تكون مطلوبة عند تطوير التطبيق برمجةبدءًا من عناصر الواجهة الرسومية وحتى فئات العمل مع الشبكة وقواعد البيانات وXML. Qt موجهة بالكامل للكائنات، وقابلة للتوسيع بسهولة، وتدعم تقنيات البرمجة القائمة على المكونات.

منذ الإصدار 4.5، تم توزيع Qt تحت تراخيص مختلفة. وهذا يعني أنه إذا كنت ستقوم بإنشاء تطبيقات تجارية، فيجب عليك شراء ترخيص Qt تجاري؛ إذا كنت تقوم بإنشاء برنامج مفتوح المصدر، فيمكنك استخدام الإصدار الذي يحمل ترخيص GPL.

قصة

أصبحت أدوات تطوير كيو تي معروفة للعامة لأول مرة في مايو 1995. تم تطوير Qt في الأصل بواسطة Haarvard Nord و Eric Chamb-Ing.

في عام 1991، بدأت جامعة هارفارد في كتابة الفصول التي شكلت كيو تي بشكل فعال، مع اتخاذ قرارات التصميم بالاشتراك مع إريك.

في العام التالي، توصل إيريك إلى فكرة "الإشارات والفتحات" - وهو نموذج برمجة بسيط ولكنه قوي لواجهة المستخدم الرسومية تم اعتماده الآن بواسطة العديد من الأدوات الأخرى.

بحلول عام 1993، كان هاروارد وإريك قد طورا أول محرك رسوميات كيو تي، وكان بإمكانهما إنشاء عناصر واجهة المستخدم الخاصة بهما.

ملاحظات غير مثيرة للاهتمام: تم اختيار الحرف "Q" كبادئة للفئة لأنه كان يتمتع بمظهر جميل في خط Emacs الذي استخدمه هاروارد. تمت إضافة الحرف "t" ليشير إلى "toolkit".

تطوير

في أبريل 1995، وقعت الشركة النرويجية Metis عقدًا معهم لتطوير برمجيات تعتمد على Qt.

26 مايو 1995 - أول نسخة عامة من كيو تي. يمكن استخدام Qt في كل من تطويرات Windows وUnix واجهة البرنامجكان هو نفسه على كلا النظامين الأساسيين.



من 1996 إلى 2001 - التطوير إلى الإصدار Qt3. تعمل Qt الآن على أنظمة Windows وMac OS X وUnix.

صيف 2005 - إصدار كيو تي 4.0. مع ما يقرب من 500 فئة وأكثر من 9000 وظيفة، Qt 4 أكبر وأكثر ثراء من أي إصدار سابق؛ لقد تم تقسيمها إلى عدة مكتبات حتى يتمكن المطورون من استخدام أجزاء Qt التي يحتاجونها فقط.

اليوم الإصدار هو Qt4.8

Qt 4 هو خطوة كبيرة إلى الأمام من الإصدارات السابقة; فهو يحتوي على مجموعة جديدة تمامًا من فئات الحاويات القوية وسهلة الاستخدام، ووظائف محسنة لمهندسي النماذج/العرض، وإطار رسومات ثنائي الأبعاد سريع ومرن، وفئات قوية لعرض وتحرير نص Unicode، ناهيك عن آلاف التحسينات الصغيرة عبر مجموعة كاملة من الطبقات كيو تي.

Qt 4 هو الإصدار الأول من Qt المتوفر على جميع الأنظمة الأساسية المدعومة للتطوير التجاري ومفتوح المصدر.

نطاق التطبيق

القدرة على إنشاء تطبيقات سطح المكتب لأنظمة التشغيل Windows وLinux وMac OS X (سواء وحدة التحكم أو ذات الواجهة الرسومية ذات الإطارات). على مدى السنوات القليلة الماضية، كان هناك اتجاه لزيادة عدد المنتجات المنتجة الأجهزة المحمولة. نتيجة لذلك، تم نقل Qt إلى منصات الأجهزة المحمولة: Symbian، Maemo، MeeGo. نحن نعلم أيضًا عن التجربة الناجحة لنقل Qt Lighthouse إلى نظام Android الأساسي.

معلومات عامة

يتيح لك تشغيل البرامج المكتوبة بمساعدتها على معظم أنظمة التشغيل الحديثة بمجرد تجميع البرنامج لكل نظام تشغيل دون تغيير كود المصدر.

يشمل جميع الفئات الأساسية التي قد تكون مطلوبة عند تطوير البرامج التطبيقية، بدءًا من عناصر الواجهة الرسومية وحتى الفئات للعمل مع الشبكة وقواعد البيانات وXML.

Qt موجهة بالكامل للكائنات، وقابلة للتوسيع بسهولة، وتدعم تقنيات البرمجة القائمة على المكونات.

هناك إصدارات من المكتبة ل مايكروسوفت ويندوز، أنظمة من فئة UNIX مع نظام الرسومات الفرعي X11، وiOS، وAndroid، وMac OS X، وMicrosoft Windows CE، وQNX، وأنظمة Linux المدمجة ومنصة S60. نحن ندرس حاليًا إمكانية إدخال دعم Qt في ويندوز فون. النقل إلى Haiku قيد التنفيذ أيضًا.

ميزة مميزةكيو تي من المكتبات الأخرى - استخدم مترجم كائن التعريف (MOC)- نظام معالجة كود المصدر الأولي (بشكل عام، Qt هي مكتبة ليست مخصصة لـ C++ النقي، ولكن للغتها الخاصة، والتي يتم "ترجمة" MOC منها للتجميع اللاحق بواسطة أي مترجم C++ قياسي). يتيح لك MOC زيادة قوة المكتبات عدة مرات من خلال تقديم مفاهيم مثل الفتحات والإشارات. بالإضافة إلى ذلك، يتيح لك ذلك جعل التعليمات البرمجية أكثر إيجازًا. تبحث الأداة المساعدة MOC في ملفات رأس C++ عن تعريفات الفئة التي تحتوي على الماكرو Q_OBJECT وتقوم بإنشاء ملف مصدر C++ إضافي يحتوي على كود كائن التعريف.

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

يأتي Qt مزودًا ببيئة تطوير واجهة المستخدم الرسومية المرئية التي تسمى Qt Designer، والتي تتيح لك إنشاء مربعات حوار ونماذج في وضع WYSIWYG.

يشتمل توزيع Qt على "Qt Linguist" - وهي أداة مساعدة رسومية تتيح لك تبسيط عملية توطين البرنامج وترجمته إلى العديد من اللغات؛ و "Qt Assistant" - نظام تعليمات Qt الذي يبسط العمل مع وثائق المكتبة، ويسمح لك أيضًا بإنشاء تعليمات عبر الأنظمة الأساسية للبرامج التي تم تطويرها استنادًا إلى Qt. بدءًا من الإصدار 4.5.0، تتضمن مجموعة Qt بيئة التطوير "Qt Creator"، والتي تتضمن محرر التعليمات البرمجية والمساعدة، أدوات الرسم"Qt Designer" والقدرة على تصحيح أخطاء التطبيقات. يمكن لـ "Qt Creator" استخدام دول مجلس التعاون الخليجي أو Microsoft VC++ كمترجم وGDB كمصحح أخطاء. ل إصدارات ويندوزتأتي المكتبة مع مترجم ورأس MinGW وملفات الكائنات.

عناصر(دعونا نسلط الضوء على زوجين )

تنقسم المكتبة إلى عدة وحدات، بالنسبة للإصدار الرابع من المكتبة فهي:

كيو تي كور- الفئات الأساسية للمكتبة التي تستخدمها الوحدات الأخرى؛

QtGui- مكونات الواجهة الرسومية؛

كيو تي نتورك- مجموعة دروس برمجة الشبكات. قد يختلف دعم البروتوكولات عالية المستوى المتنوعة من إصدار إلى آخر. يحتوي الإصدار 4.2.x على فئات للعمل مع بروتوكولي FTP وHTTP. تم تصميم فئات مثل QTcpServer وQTcpSocket لـ TCP وQUdpSocket لـ UDP للعمل مع بروتوكولات TCP/IP؛

QtOpenGL- مجموعة من الفصول للعمل مع برنامج OpenGL؛

كيو تي اس كيو ال- مجموعة من الفئات للعمل مع قواعد البيانات باستخدام لغة منظمة استعلامات SQL. الفئات الرئيسية لهذه الوحدة في الإصدار 4.2.x: قاعدة بيانات QSql- فئة لتوفير اتصال بقاعدة بيانات؛ للعمل مع قاعدة بيانات معينة، يتطلب كائنًا موروثًا من فئة QSqlDriver - فئة مجردة يتم تنفيذها لقاعدة بيانات محددة وقد تتطلب قاعدة بيانات SDK للتجميع. على سبيل المثال، لإنشاء برنامج تشغيل لقاعدة بيانات FireBird/InterBase، يتطلب الأمر ملفات .h ومكتبات الارتباط الثابتة المضمنة في مجموعة أدوات التسليم لقاعدة البيانات هذه؛

كيو تي سكريبت- دروس للعمل مع البرامج النصية كيو تي؛

كيو تي اس في جي- فئات العرض والعمل باستخدام بيانات الرسومات المتجهة القابلة للتطوير (SVG)؛

كيو تي اكس مل- وحدة للعمل مع XML، تدعم نماذج عمل SAX وDOM؛

كيو تي ديزاينر- فئات لإنشاء ملحقات QtDesigner لعناصر واجهة المستخدم الخاصة بك؛

QtUITools- فئات لمعالجة نماذج Qt Designer في التطبيق؛

مساعد كيو تي- نظام المساعدة؛

دعم Qt3- وحدة تحتوي على الفئات اللازمة للتوافق مع إصدار مكتبة Qt 3.x.x؛

QtTest- وحدة للعمل مع اختبارات الوحدة؛

QtWebKit- وحدة WebKit مدمجة في Qt ويمكن الوصول إليها من خلال فئاتها؛

أنماط QtXml- وحدة لدعم XQuery 1.0 وXPath 2.0؛

فونون- وحدة لدعم تشغيل وتسجيل الفيديو والصوت، محليًا ومن الأجهزة وعبر الشبكة؛

QtCLucene- وحدة لدعم البحث عن النص الكامل، المستخدمة في الإصدار الجديد من المساعد في Qt 4.4؛

ActiveQt- وحدة للعمل مع تقنيات ActiveX وCOM لمطوري Qt تحت نظام Windows.

QtDeclative- وحدة توفر إطارًا تعريفيًا لإنشاء واجهات مستخدم ديناميكية وقابلة للتخصيص.

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

بعد ذلك، باستخدام الأداة المساعدة qmake، يتم استخدامها لإنشاء ملف تعريف للأداة المساعدة لإنشاء المترجم. من الممكن أيضًا العمل باستخدام أدوات التكامل مع Microsoft Visual Studio 2003/2005/2008/2010. في الآونة الأخيرة، أصبح التكامل مع Eclipse متاحًا للإصدار 4.x.x من المكتبة.

يمكن لمطوري Java استخدام Qt باستخدام إطار عمل Qt Jambi من نفس الشركة المصنعة (توقفت شركة Qt Software رسميًا عن تطوير هذا الإطار في عام 2009).

«+»

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

بيئة التطوير

Qt Creator عبارة عن بيئة تطوير متكاملة (IDE) مجانية عبر الأنظمة الأساسية للتطوير في C وC++ وQML. تم تطويره بواسطة Trolltech (Nokia) للعمل مع إطار عمل Qt. يتضمن واجهة مصحح أخطاء رسومية وأدوات تطوير الواجهة المرئية باستخدام كل من QtWidgets وQML. المترجمات المدعومة: Gcc، Clang، MinGW، MSVC، Linux ICC،GCCE، RVCT، WINSCW.

الهدف الرئيسي لـ Qt Creator هو تبسيط تطوير التطبيقات باستخدام إطار عمل Qt على منصات مختلفة. لذلك، من بين الميزات المتأصلة في أي بيئة تطوير، هناك أيضًا ميزات محددة، مثل تصحيح أخطاء التطبيقات في QML وعرض البيانات من حاويات Qt في مصحح الأخطاء، وهو مصمم واجهة مدمج في كل من QML وQtWidgets.

العمل في كيو تي الخالق

يحتوي Qt Creator على "معالج" مناسب لإنشاء مشاريع ونماذج وملفات فئة جديدة وما إلى ذلك. على الرغم من أنه بدلاً من إنشاء ملف واجهة المستخدم للنافذة الرئيسية، يمكنك إدراج بعض التعليمات البرمجية البسيطة في المشروع دون لمس عالم البرمجة المرئية. بعد إنشاء المشروع أو فتحه، تظهر أمامنا بيئة التطوير نفسها. في البداية تبدو غير عادية. على سبيل المثال، لا توجد علامات تبويب مشهورة (علامات تبويب ذات أشواك). أو بالأحرى، فهي موجودة لكل شيء باستثناء ملفات المحرر. الملفات نفسها متاحة من قائمتين: ملفات المشروع (افتراضيًا في اللوحة اليسرى) و فتح الملفاتالخط العلويلوحة التحرير). لماذا قررت التخلي عن علامات التبويب؟ أعتقد أنه من أجل توفير مساحة الشاشة.

نقطة أخرى غير عادية نسبية تمامًا، نظرًا لأن واجهة "عدم الحوار" قد تم اعتمادها منذ فترة طويلة من قبل بعض البرامج الأخرى (على سبيل المثال، محرر TEA). في Qt Creator، تظهر حقول الإدخال للبحث عن النص واستبداله، وعندما تكتب نصًا، يتم تمييز التطابقات التي تم العثور عليها على الفور في المحرر. لمزيد من البحث هناك F3، وللاستبدال يوجد حقل إدخال منفصل. تقع الخيارات أيضًا في مكان قريب. وبفضل كل هذا، يتم تنفيذ هذه العمليات بسرعة وسهولة. الأمر نفسه ينطبق على لوحات المعلومات وتصحيح الأخطاء: لا توجد طريقة، والنوافذ غير الضرورية تتداخل مع النافذة الرئيسية، وغيرها من المسرات للنهج السابق في هندسة الواجهة. كل شيء في نافذة رئيسية واحدة!

اعتنى Qt Creator أيضًا بمحرر التعليمات البرمجية. قليل من الناس يمكن أن يتفاجأوا بتسليط الضوء على بناء الجملة هذه الأيام، لذلك دعونا ننتقل إلى الآخرين على الفور. فرص مفيدة. على سبيل المثال، يوجد "محلل التعليمات البرمجية الكامل" - وهذه هي قدرة المحرر على التحقق من صحة التعليمات البرمجية من وجهة نظر لغة البرمجة. عند كتابة التعليمات البرمجية، يمكنك معرفة المكان الذي ارتكبت فيه خطأً في بناء الجملة قبل تجميعه. في معظم الحالات، يعمل، على الرغم من وجود استثناءات. يعمل الإكمال التلقائي بشكل رائع: اكتب اسم مثيل الفصل الدراسي، ثم ضع نقطة أو "->" - وستحصل على قائمة منسدلة بأعضاء الفصل الدراسي. هناك طي لكتل ​​التعليمات البرمجية - ما يسمى بـ "الطي". ومع ذلك، أعتقد أن الكود يكون أكثر وضوحًا بدونه، لذلك لا أستخدم هذا الخيار أبدًا.

تم التنقل عبر الكود بشكل جيد - وبدون علامات Ctag خارجية. ما عليك سوى وضع المؤشر على اسم الوظيفة أو المتغير والضغط على F2، وبعد ذلك سينتقل المحرر إلى موقع الإعلان. Shift-F2 - يقوم بالتبديل بين الإعلان والكود، وF4 - يقوم ببساطة بالتبديل بين ملف الرأس وملف cpp. إذا قمت بتحريك مؤشر الماوس فوق اسم الوظيفة التي تم استدعاؤها في التعليمات البرمجية، فسوف يظهر تلميح حول معلماتها.

نظام المساعدةيعمل على النحو التالي. لنفترض أن لديك متغيرًا مثل QMenu في مكان ما في التعليمات البرمجية الخاصة بك. إذا قمت بوضع المؤشر عليه والضغط على F1، فستظهر لوحة المساعدة مع وصف فئة QMenu. توجد أيضًا علامة تبويب تعليمات في النافذة الرئيسية، حيث تتوفر جميع وثائق Qt.

لذلك، سوف تقضي معظم وقتك في علامة التبويب "المحرر". ليس من الواضح تمامًا سبب وجود ما يصل إلى خمسة أقسام في إعدادات Qt Creator لمحررين مختلفين - بشكل افتراضي، للبرامج النصية، لـ C++، للمشاريع وPerforce (نظام التحكم في الإصدار التجاري). إعدادات محرر C++ هي إعدادات محرر التعليمات البرمجية لبرنامج Qt الخاص بك. ألاحظ أنه في "اللقطات" الأحدث لبرنامج Qt Creator، لا تزال إعدادات الخط منظمة في قسم واحد، وهو أمر متوقع.

من المفيد تكوين الإضاءة الخلفية والخطوط، لأن الإعدادات الافتراضية ليست مريحة للغاية للعمل معها. أولاً، حجم الخط صغير جدًا، وثانيًا، يتم تفسير كتل التعليمات البرمجية الموجودة في #ifdef / #endif بواسطة المحلل اللغوي على أنها "رمز معطل" (تعبير من إعدادات Qt Creator) وهي ملونة باللون الرمادي - وهي ليست مريحة للغاية لتحليل ما هو مكتوب. إذا كنت لا تحب "الطي"، فقم بتعطيل عرض علامات الطي في إعدادات المحرر.

يمكنك تعيين الإشارات المرجعية ونقاط التوقف في حقول المحرر. يمكن تقسيم لوحة المحرر نفسها إلى عدد لا نهائي من اللوحات المتداخلة - على غرار لوحة Konqueror. وبالتالي، يمكنك تحرير عدة ملفات على الشاشة في نفس الوقت، أو نفس المستند، ولكن في أماكن مختلفة. للقيام بذلك، يجب عليك أولاً تقسيم لوحة المحرر (على سبيل المثال، من خلال نافذة - تقسيم أعلى/أسفل)، ثم تحديد عنصر القائمة نافذة - مستند مكرر. يكون هذا الأسلوب في بعض الأحيان أكثر فائدة من التنقل الممل عبر الإشارات المرجعية.

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

دعونا نولي بعض الاهتمام لنافذة الإعدادات، والتي لحسن الحظ، هناك الكثير منها. يمكنك تخصيص اختصارات لوحة المفاتيح، علاوة على ذلك، استيرادها/تصديرها باستخدام ملفات خارجية. يعد هذا مناسبًا لنقل اختصارات لوحة المفاتيح المفضلة لديك من جهاز إلى آخر. يتضمن Qt Creator ملفين مثبتين مسبقًا بشكل افتراضي: لـ MS Visual C++ وXcode. كل ما يتعلق بالإكمال التلقائي، والمسافات البادئة، وتمييز بناء الجملة، وما إلى ذلك موجود في إعدادات المحرر - محرر النصوص.

أداة أخرى مثيرة للاهتمام في Qt Creator هي Locator (في الإصدارات القديمة - البحث السريع). لنقل التركيز إليه، فقط اضغط على Ctrl-K. يبدو وكأنه شريط بحث عادي، ولكنه يستخدم للبحث بسرعة عن أي شيء تريده. وبشكل أكثر تحديدًا، فإنه يبحث عن الملفات، في الملفات، والفئات، والوظائف. يدعم أحرف التعديل لتحسين مهمة البحث. على سبيل المثال، تريد البحث في وثائق Qt للحصول على وصف لمؤشر qApp العام. ما يجب القيام به؟ في السابق، كان عليك فتح الوثائق من خلال المتصفح والبحث فيها. ولكن في Qt Creator، عندما يكون محدد الموقع في متناول اليد دائمًا، هل يكفي الكتابة في شريط البحث؟ qapp واضغط على Enter. انتقل إلى السطر رقم 100؟ الرجاء طلب الرقم ثم أدخل مرة أخرى.

وأخيرًا، دعنا نعود إلى التفاعل مع مصحح أخطاء GDB. يسمح لك Qt Creator من خلال واجهته الرسومية بتصحيح ليس فقط المشروع الحالي، ولكن أيضًا أي مشروع آخر برنامج خارجي- بالطبع، إذا تم تجميعها مع معلومات التصحيح. عند تصحيح الأخطاء، يتم عرض أنواع مختلفة من البيانات في علامات تبويب منفصلة: الخيوط والمتغيرات ونقاط التوقف والمفكك. يبدو مثيل QStringList واضحًا بشكل خاص في مصحح الأخطاء - حيث تكون جميع عناصره مرئية. يتم إيقاف تشغيل الإخراج القياسي لـ GDB نفسه افتراضيًا، بالإضافة إلى بعض علامات التبويب الأخرى مثل المعلومات حول محتويات سجلات المعالج. إذا تعطل البرنامج لسبب ما، فستظهر البيانات الموجودة في لوحة التصحيح على الفور مكان حدوث الفشل في التعليمات البرمجية.

مثال 1

سيكون برنامجنا الأول مزودًا بواجهة مستخدم رسومية (GUI - واجهة المستخدم الرسومية).

#يشمل

#يشمل

int الرئيسي (int argc، char *argv)

تطبيق QApplication(argc, argv);

QPushButton *newbtn = new QPushButton(QObject::tr("OK"));

QObject::connect(newbtn, SIGNAL(clicked()), &app, SLOT(quit()));

newbtn->resize(180,40);

newbtn->show();

إرجاع app.exec();

أول سطرين هما تعريفات فئة Qt.

تنتمي هذه الفئات إلى واجهة برمجة التطبيقات (API) لمكتبة Qt. تحتوي المكتبة على ملفات بنفس الأسماء التي تصف هذه الفئات.

يقوم السطر 6 بإنشاء كائن QApplication. يدير هذا الفصل جميع موارد التطبيق. ثم يتم إنشاء كائن من فئة QPushButton بالنقش "OK".

الزر هو القطعة. يتم استخدام السطر 8 لربط الإشارة التي تم النقر عليها () للزر بفتحة إنهاء () لكائن QApplication3. في السطر 9 قمنا بتعيين حجم الأداة وفي السطر 10 نعرضها. يتم استخدام السطر 11 لنقل التحكم في تطبيق Qt. عند هذه النقطة، يدخل البرنامج في حلقة لمعالجة أحداث المستخدم والنظام.

مثال 2: التحقق من صحة مدخلات المستخدم

عندما يُطلب من المستخدم إدخال بعض البيانات في حقل نصي، فمن الشائع جدًا أن يحصل على شيء غير متوقع تمامًا. يمكن للمستخدم إدخال أرقام بالكلمات، أو استخدام فاصل عشري خاطئ، أو نسيان إدخال رمز المنطقة رقم التليفون. وبالتالي، في معظم الحالات، من الضروري التحقق من صحة (المقبولية)1 المعلومات المحددة.

يحتوي Qt على فئة QValidator، والتي تضمن صحة البيانات المدخلة. لا يمكن استخدام فئة البيانات مباشرة. للتحقق من البيانات، سيتعين عليك إما استخدام الفئات الفرعية الجاهزة QIntValidator أو QDoubleValidator أو QRegExpValidator أو كتابة فئة فرعية بنفسك.

يتم تمرير طريقة التحقق من الصحة (QString & input, int & pos) إلى السلسلة المراد التحقق منها وموضع المؤشر. يمكن للطريقة إرجاع القيم التالية:

QValidator::Invalid - السلسلة غير صالحة.

QValidator::Acceptable - السلسلة مقبولة.

QValidator::Intermediate - لا يمكن قبول السلسلة في حالتها الحالية، ولكنها قد تصبح صالحة.

لنكتب برنامجًا يتحقق مما إذا كانت السلسلة عبارة عن رقم حقيقي. دعنا نستخدم فئة QDoubleValidator الجاهزة:

النافذة الرئيسية::MainWindow()

الشبكة = جديد QGridLayout؛ doubleedit = new QLineEdit;

lbdouble = new QLabel(tr("Double:"));

lbresult = new QLabel(tr("النتيجة:"));

النتيجة = QLabel جديدة؛

vld = new QDoubleValidator(-5, 2999, 5, this);

vld->setNotation(QDoubleValidator::ScientificNotation);

doubleedit->setValidator(vld);

Grid->addWidget(lbdouble, 0, 0);

Grid->addWidget(doubleedit, 0, 1);

Grid->addWidget(lbresult, 1, 0); Grid->addWidget(result, 1, 1);

تغيير الحجم(160, 120); setLayout(grid); ...

يمكن لمنشئ فئة QDoubleValidator قبول المعلمات التالية:

QDoubleValidator::QDoubleValidator (قاع مزدوج، قمة مزدوجة، كسور عشرية، QObject * الأصل)

نطاق الأعداد الحقيقية هو من الأسفل إلى الأعلى شاملاً. الكسور العشرية - عدد الأرقام بعد فاصل العلامة العشرية2.

باستخدام طريقة setNotation(Notation) لفئة QDoubleValidator، يمكنك ضبط صلاحية التدوين العلمي:

QDoubleValidator::StandardNotation - التدوين القياسي (على سبيل المثال: 1.124 أو -2).

QDoubleValidator::ScientificNotation - التدوين العلمي، أي. قد يحتوي الرقم على جزء أسي (على سبيل المثال: 2.7E-3 أو 3.3E+2)

للتحقق من صحة البيانات المدخلة سنستخدم طريقة validate() :

النافذة الرئيسية::MainWindow()

QObject::connect(doubleedit, SIGNAL(textChanged (const QString &)), this, SLOT(showresult(const QString &)));

باطلة MainWindow::showresult(const QString &text)

QString numtext = text;

if (vld->validate(numtext, pos) == 0) result->setText(tr("invalid"));

if (vld->validate(numtext, pos) == 1) result->setText(tr("Intermediate"));

if (vld->validate(numtext, pos) == 2) result->setText(tr("Acceptable"));

رمز البرنامج

main.cpp

#يشمل

#تتضمن "mainwindow.h"

int الرئيسي (int argv، char ** args)

تطبيق QApplication(argv, args);

نافذة النافذة الرئيسية؛

إرجاع app.exec();

Mainwindiw.h#ifndef MAINWINDOW_H#define MAINWINDOW_H #include class MainWindow: public QWidget( Q_OBJECT public: MainWindow(); فتحات خاصة: void showresult(const QString &); Private: QGridLayout *grid; QLineEdit *doubleedit; QLabel *lbdouble, *lbresult, *result; QDoubleValidator *vld;); #endif Mainwindow.cpp#يشمل #include "mainwindow.h" MainWindow::MainWindow())(grid = new QGridLayout; doubleedit = new QLineEdit; lbdouble = new QLabel(tr("Double:")); lbresult = new QLabel(tr("Result:" ) ); result = new QLabel; vld = new QDoubleValidator(-5, 2999, 5, this); doubleedit, 0, 1);grid->addWidget(lbresult, 1, 0); )))، هذا، SLOT(showresult(const QString &)));) void MainWindow::showresult(const QString &text)( int pos = 0; QString numtext = text; if (vld->validate(numtext, pos) = = 0) result->setText(tr("invalid")); if (vld->validate(numtext, pos) == 1) result->setText (tr("Intermediate")); (numtext, pos) == 2) result->setText(tr("Acceptable"));)

مثال 3. رسومات ثنائية الأبعاد

باستخدام فئة QPainter، يمكننا الرسم على أي كائن موروث من فئة QPaintDevice (QWidget، QPrinter، QImage، QGLFramebufferObject، وما إلى ذلك). يمكنك رسم الأشكال الهندسية وخرائط البكسل والنص. أولاً، دعونا نلقي نظرة على الفئات التي يمكن أن تكون مفيدة عند العمل مع QPainter.

يتم استخدام فئتي QPoint وQPointF لتحديد موضع نقطة في نظام إحداثي ثنائي الأبعاد. QPoint - للأعداد الصحيحة وQPointF - للأعداد الحقيقية. تنطبق عمليات الجمع والطرح والضرب والقسمة على النقاط:

نقطة QPoint(5, 5);

نقطة QPoint2(10, 10);

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

نقطة كيو بوينت (5، 10)؛

نقطة QPoint2(5, 10);

إذا (نقطة == نقطة 2)

bln = point.isNull();

يتم استخدام فئتي QSize وQSizeF لتخزين الحجم. بالإضافة إلى الأساليب المشابهة لتلك الخاصة بفئتي QPoint وQPointF، تحتوي هذه الفئات على أسلوب Scale()، والذي يسمح لك بقياس كائن رسومي.

يتم استخدام فئتي QRect و QRectF لتخزين المساحات المستطيلة (إحداثيات الزاوية اليسرى العليا وحجمها):

QRectF(نقطة QPointF، حجم QSizeF);

تصف فئتا QLine وQLineF الخط المستقيم. تصف فئتا QPolygon وQPolygonF شكلًا مغلقًا يتكون من خطوط مستقيمة.

باستخدام فئة QColor، يمكنك تخزين معلومات اللون. تدعم بيئة Qt ثلاثة نماذج ألوان: RGB، وCMYK، وHSV. بالنسبة لنموذج الألوان RGB، هناك بنية QRgb. هناك عدة طرق لتعيين لون في كائن فئة QColor:

تمرير المعلمات إلى المنشئ

كثافة العمليات غير الموقعة الحمراء = 50؛

كثافة العمليات الخضراء غير الموقعة = 100؛

كثافة العمليات غير الموقعة الأزرق = 0؛

غير موقعة ألفا = 128؛

QColor mycolor(الأحمر، الأخضر، الأزرق، ألفا)؛

QRgb rgb1 = (50, 100, 0);

QColor mycolor2(rgb1);

باستخدام الطرق QColor::setRgb(), QColor::setRgba(), QColor::setRgbF(), ​​​​QColor::setHsv(), QColor::setHsvF(), QColor::setCmyk(), QColor:: سيتكميكف ()

mycolor.setHsv(200, 100, 50);

من الممكن ضبط اللون في نموذج واحد وقراءته في نموذج آخر:

int غير الموقعة h، s، v؛

QColor mycolor(100, 100, 100);

mycolor.getHsv(&h, &s, &v);

دعنا نعود إلى فئة QPainter. من أجل البدء في الرسم، نحتاج فقط إلى إنشاء كائن من فئة QPainter وتمرير مؤشر إلى الكائن المراد رسمه:

QPainter pnt(this);

pnt.drawLine(line);

باطلة Wnd::paintEvent(QPaintEvent *event)

خط QLineF (10.0، 80.0، 90.0، 20.0)؛

pnt.begin(هذا);

pnt.drawLine(line);

يتم استدعاء أسلوب QWidget::paintEvent() على عناصر واجهة المستخدم التي تحتاج إلى إعادة رسمها.

في معظم الحالات، يتم الطلاء بواسطة كائن QPainter واحد على كائنات طلاء متعددة. لحفظ إعدادات الرسم القديمة (عند الانتقال إلى كائن جديد)، يمكنك استخدام أساليب QPainter::save() وQPainter::restore(). يدفع QPainter::save() إلى مكدس التثبيت، فينبثق QPainter::restore().

لرسم مخطط تفصيلي لشكل، تحتاج إلى تمرير كائن فئة QPen (قلم) إلى كائن فئة QPainter باستخدام QPainter::setPen().

باستخدام الطرق المناسبة، يمكنك ضبط نمط القلم (اللون والسمك ونوع نهايات الخط).

لملء الخطوط المغلقة، يتم استخدام فرشاة، أي. كائن من فئة QBrush. قياسًا على فئة QPen، يتم تعيين الفرشاة باستخدام طريقة QPainter::setBrush(). يمكنك تمرير كائن QBrush أو أحد أنماط BrushStyle المحددة مسبقًا إليه:

QPainter pnt(this);

pnt.setBrush(QBrush(Qt::blue, Qt::VerPattern)); // فرشاة زرقاء مع تظليل عمودي

تسمح لك فئة QPainter بتدوير الكائنات وقياسها وإزاحتها وشطبها. هناك طرق مقابلة لهذه العمليات: تدوير ()، مقياس ()، ترجمة ()، Sheap ().

تدعم مكتبة Qt تقنيات منع التعرج:

pnt.setRenderHint(QPainter::antialiasing, true);

tl;dr - مكتبة Qt لإنشاء تطبيقات ذات إطارات مشتركة بين الأنظمة الأساسية في لغة C++.

Qt، كمشروع، نشأ من رغبة مطوري C++ في الحصول على مجموعة أدوات ملائمة لتطوير واجهات البرامج الرسومية (GUI). إذا، على سبيل المثال، في Java AWT يخرج من الصندوق لهذه الأغراض، وفي Python Tk، ثم في C++ لم يكن هناك شيء مماثل. وليس فقط فيما يتعلق بتطوير واجهة المستخدم الرسومية، ولكن أيضًا دروس العمل مع الشبكة والوسائط المتعددة وغيرها من الأشياء الشائعة جدًا. الأمر الذي كان المطورون منزعجين جدًا منه. حسنًا، بما أن هناك طلبًا، فإن العرض لم يستغرق وقتًا طويلاً للوصول. وفي عام 1995، صدر الإصدار الأول من المكتبة. منذ ذلك الحين، توسعت Qt بسرعة إلى ما هو أبعد من مجرد تطوير الواجهة.

لذلك، لا ينبغي اعتبار Qt مجموعة من الفئات لإنشاء واجهة المستخدم الرسومية، بل يجب اعتبارها مجموعة أدوات كاملة من الفئات لجميع المناسبات. هذه مجموعة من كل شيء (أو كل شيء تقريبًا) قد يحتاجه مبرمج التطبيقات لإنشاء أي تطبيق تقريبًا. ينقسم هيكل المكتبة منطقيا إلى مكونات، وهناك الكثير منها ومع كل منها نسخة جديدةيحتوي Qt على المزيد والمزيد من الفئات المفيدة فيها.

هناك مكونان رئيسيان - QtCore، وهو جوهر المكتبة، وQtGui، الذي يمثل مكونات الواجهة الرسومية. كما سنرى لاحقًا، فإن المشروع الذي تم إنشاؤه يحتوي دائمًا على هذين المكونين (باستثناء تطبيقات وحدة التحكم، حيث يلعب QtCore دورًا إلزاميًا).

حسنًا، بناءً على الاحتياجات، يتمتع المطورون بالحرية في استخدام ما يريدون. QtNetwork للعمل مع الشبكة، اكتب عميل Torrent الخاص بك. QtMultimedia لتنفيذ مشغل الفيديو والصوت. QtWebEngine لتضمين محرك متصفح كامل في التطبيق الخاص بك. وأكثر من ذلك بكثير.

ومن الجدير بالذكر أيضًا أن الوظيفة المعلنة عبر الأنظمة الأساسية موجودة بالفعل. يمكنك أخذ التعليمات البرمجية الخاصة بك التي تم تطويرها على نظام واحد (Windows، MinGW) وتجميعها مع مترجم نظام آخر (Linux،GC) والحصول عليها ملف ثنائيقادر على الجري هناك دون الكثير من المتاعب. كما أظهرت الممارسة، تبدأ المشاكل الخاصة عندما يصبح التطبيق محملاً بشكل كبير بمكتبات الطرف الثالث.

ستكون المكافأة الرائعة لمطوري الويب هي الفرصة لتطوير البرامج ليس فقط بلغة C++، ولكن أيضًا بلغة QML، والتي تشبه إلى حد كبير JavaScript. هذا فرع خاص من تطوير Qt يهدف إلى إنشاء نماذج أولية سريعة وتطوير تطبيقات الهاتف المحمول.

وبطبيعة الحال، واحدة من أبرز Qt هي بيئة تطوير Qt Creator. بيئة تطوير عالمية ومريحة للغاية على Qt، غير مثقلة بالوظائف غير الضرورية، .

بعد يوم من ما بعد الحياة، بدأت ألاحظ تسرب الكارما، لذا أعتذر مقدمًا عن أسلوب العرض الذي ربما يكون غير مقبول في المقال والذاتية

مرحبًا هبراهابر!

في الآونة الأخيرة، لم أستطع إلا أن أنتبه إلى شعبية موضوع Qt على Hubrik، ولكن مع ذلك، في التعليقات ما زلت أرى أشخاصًا يقولون أشياء كاذبة وغير مفهومة تمامًا. أردت من خلال هذا المنشور تبديد بعض المفاهيم الخاطئة حول كيو تي وإخبارك بالسبب يجب عليك التبديل من Java/Obj-C/.NET إلى Qt الناعم والرقيق.

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

حسنا، دعونا نذهب؟

فيش رقم 1. واجهة برمجة تطبيقات C++

ليس سراً أن Qt لديها واجهة برمجة تطبيقات مريحة للغاية، وبشكل أكثر تحديدًا، تحتوي وحدة qtbase على عدد كافٍ من الفئات لمعظم المهام اليومية ( كيو تي هو أكثر من مجرد إطار عمل واجهة المستخدم الرسومية). لقد تحدثت بالفعل عن أغلفة حاويات STL في مقالتي قبل ثلاث سنوات - . يتم أيضًا تضمين دروس للعمل مع السلاسل وتصحيح الأخطاء وغير ذلك الكثير.

QString Fruits = "تفاح، موز، برتقال، موز"؛ QStringList FruitList = Fruits.split("، "); كديبوج ()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
تجدر الإشارة إلى أن Qt تحتوي أيضًا على وحدات للعمل المريح مع XML وقواعد البيانات ( مع دمج نظام MVC kutesh اللذيذ واللذيذ)، OpenGL، أعمال الصوت/الفيديو (Phonon)، برمجة الشبكات، WebKit2. بالنسبة للمهام التي يواجهها مشروع متوسط، فإن هذا المطبخ يكفي في 90٪ من الحالات، ونادرا ما تحدث مشاكل مع الوحدات.

نظرًا لحبي لـ C++، فأنا سعيد جدًا بالدعم الذي توفره Qt للعديد من الأشياء غير التافهة على مستوى الأنظمة الأساسية. اضطررت عدة مرات إلى حل لحظات غير مفهومة بشكل خاص، ولكن هذا هو الحال.

فيش رقم 2. كيو تي سريعة

يعد Qt Quick أسلوبًا رائعًا لإنشاء واجهة مستخدم رسومية. باستخدام لغة تعريفية QML (خمن ​​أين تم اختراعها lol) تشبه JavaScript، يمكنك تحقيق إنتاجية عالية عند إنشاء نماذج أولية للواجهة في التطبيقات أيتعقيد. والشيء المضحك هو أنه مع سير الأمور على هذا النحو، حتى المصمم الذي يعرف بناء جملة JavaScript يمكنه التعامل مع النماذج الأولية للواجهة. ستكون هذه كلها كلمات فارغة إذا لم أعرض لك مثالاً على التعليمات البرمجية الوظيفية (يمكن العثور على المزيد في مشروع Qt - هناك).

استيراد مستطيل QtQuick 2.0 (المعرف: عرض الصفحة: 320؛ الارتفاع: 480 اللون: "رمادي فاتح" النص (المعرف: نص helloText: "مرحبًا بالعالم!" ص: 30 مرساة.horizontalCenter: page.horizontalCenter Font.pointSize: 24؛ الخط. غامق: صحيح) الشبكة (المعرف: colorPicker x: 4؛ مرساة. أسفل: page.bottom؛ مرساة. أسفل الهامش: 4 صفوف: 2؛ أعمدة: 3؛ تباعد: 3 خلايا (cellColor: "أحمر"؛ عند النقر: helloText.color = cellColor ) خلية ( cellColor: "أخضر"؛ عند النقر عليه: helloText.color = cellColor ) خلية ( cellColor: "أزرق"؛ عند النقر عليه: helloText.color = cellColor ) خلية ( cellColor: "أصفر"؛ عند النقر عليه: helloText.color = cellColor ) الخلية (cellColor: "steelblue"؛ عند النقر عليها: helloText.color = cellColor ) الخلية (cellColor: "أسود"؛ عند النقر عليها: helloText.color = cellColor ) )

يعد تنفيذ كائن الخلية أمرًا تافهًا للغاية ويتم تعريفه بهذه الطريقة

استيراد عنصر QtQuick 2.0 (المعرف: الاسم المستعار لخاصية الحاوية cellColor: مستطيل. إشارة اللون التي تم النقر عليها (لون الخلية الملونة) العرض: 40؛ الارتفاع: 25 مستطيل (المعرف: حد المستطيل. اللون: مرساة "بيضاء". تعبئة: الأصل) منطقة الماوس (المراسي. ملء: الأصل عند النقر: Container.clicked(container.cellColor)) ) )

لا يوجد سطر واحد من لغة C++ في هذا الكود وهو يعمل بشكل جيد. انها جيدة، أليس كذلك؟ لقد جعلني أشعر وكأنني ساحر - فمن الأسهل الذهاب إلى المتجر لشراء الخبز بدلاً من إنشاء تطبيق مثل هذا. ومع ذلك، في التطبيقات المعقدة، QML وحده لا يكفي، ونحن ندمجه مع C++. تمت مناقشة ذلك في العديد من المقالات حول مركز برامج Qt - على سبيل المثال، .

فيش رقم 3. مجتمع

حسنًا، لقد وصلنا إلى لحظة ممتعة. إذا تحدثنا عني، فإن عملي مع Qt قليل نسبيًا - منذ 5 سنوات فقط. تعقد شركة Qt أحداثًا سنوية - قمة Qt Developer Days وQt Contributors. لقد كنت في كل واحدة منها مرة واحدة، في العام الماضي، وأعجبني حقًا - مستوى الإعداد مرتفع، ويتم تقديم الانطباعات. كما أتيحت لي الفرصة لـ تواصل مع "قدامى المحاربين" في كيو تي - الأشخاص الذين حضروا القمة لمدة 10 سنوات. أستطيع أن أتخيل كم هو رائع أن ترى نمو مثل هذا المشروع أمام عينيك وأن تكون في مركز كل التطوير - إنه لذيذ فقط .

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

فيش رقم 4. مفتوح المصدر ومراجعة التعليمات البرمجية

تم تطوير Soretz Cut بشكل علني بشكل رئيسي بواسطة Digia (comm.support +)، وKDAB، وICS والمطورين المتحمسين. يتم استضافة الأمر برمته على Gitorious - Tadamts. للمساهمة في تطوير المشروع، عليك أن تمر حازمالتحقق من الكود - آليًا (الامتثال لنمط الكود الذي كتبت عنه سابقًا -) والبشر - سيتم فحص الكود الخاص بك من قبل رجال ملتحين لا يثقون بك وسيبحثون عن أبواب خلفية في الكود الخاص بك. هذه كلها عملية معقدة إلى حد ما (مشاكل تتعلق بـ Git/المراجعات في مجلس المراجعة) ومن المحتمل أن أكتب مقالًا عنها في أحد هذه الأيام.

بالمناسبة، لدي بعض الالتزامات في شجرة qtbase، لذا يمكنك أن تسألني في المساء وسأحاول الإجابة على أسئلتك.

فيش رقم 5. ديناميات تطوير المشروع

لقد كانت Qt قيد التطوير لسنوات عديدة، منذ أواخر التسعينيات. خلال هذا الوقت، قامت شركات مثل Trolltech وNokia بالفعل بتشغيل ما يكفي من نسختها التجارية، والآن تقوم Digia بذلك. ولكن هناك شيء واحد مؤكد، وهو أن المشروع حي ومزدهر. لبضع سنوات أخرى، كتب الجميع التصميم باستخدام عناصر واجهة المستخدم (فئات C++، وكلها تعتمد على QWidget)، ولكن اليوم حتى الطفل الصغير يمكنه القيام بذلك. لا أعتقد أن الأمر يستحق القول أنه بالتوازي معه، يتم تطوير أقوى شيء - Qt Creator، الذي يرضي اليوم ليس فقط مبرمجي Qt!

^ رائع Qt Creator، حيث يمكنك إنشاء المعجزات ولن تحصل على أي شيء مقابل ذلك.

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

بالإضافة إلى ذلك، يتم الآن تطوير المنصات بنشاط آي أو إس، أندرويد، ويندوز فون، يمكنك الآن تجميع البرامج لهم!

خلاصة القول

أعتقد أنك تفهم أن كيو تي رائعة حقًا وبعد قراءة المقال، وقعت في حبها بقدر ما أحببتها أنا.
شكرًا لكم على اهتمامكم!

بعد يوم من ما بعد الحياة، بدأت ألاحظ تسرب الكارما، لذا أعتذر مقدمًا عن أسلوب العرض الذي ربما يكون غير مقبول في المقال والذاتية

مرحبًا هبراهابر!

في الآونة الأخيرة، لم أستطع إلا أن أنتبه إلى شعبية موضوع Qt على Hubrik، ولكن مع ذلك، في التعليقات ما زلت أرى أشخاصًا يقولون أشياء كاذبة وغير مفهومة تمامًا. أردت من خلال هذا المنشور تبديد بعض المفاهيم الخاطئة حول كيو تي وإخبارك بالسبب يجب عليك التبديل من Java/Obj-C/.NET إلى Qt الناعم والرقيق.

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

حسنا، دعونا نذهب؟

فيش رقم 1. واجهة برمجة تطبيقات C++

ليس سراً أن Qt لديها واجهة برمجة تطبيقات مريحة للغاية، وبشكل أكثر تحديدًا، تحتوي وحدة qtbase على عدد كافٍ من الفئات لمعظم المهام اليومية ( كيو تي هو أكثر من مجرد إطار عمل واجهة المستخدم الرسومية). لقد تحدثت بالفعل عن أغلفة حاويات STL في مقالتي قبل ثلاث سنوات - tytsk. يتم أيضًا تضمين دروس للعمل مع السلاسل وتصحيح الأخطاء وغير ذلك الكثير.

QString Fruits = "تفاح، موز، برتقال، موز"؛ QStringList FruitList = Fruits.split("، "); كديبوج ()<< fruitsList; // выведет в консоль [ "apple", "banana", "orange", "banana" ] fruitsList.removeDuplicates(); fruits = fruitsList.join(", "); qDebug() << fruits; // выведет в консоль "apple, banana, orange"
تجدر الإشارة إلى أن Qt تحتوي أيضًا على وحدات للعمل المريح مع XML وقواعد البيانات ( مع دمج نظام MVC kutesh اللذيذ واللذيذ)، OpenGL، أعمال الصوت/الفيديو (Phonon)، برمجة الشبكات، WebKit2. بالنسبة للمهام التي يواجهها مشروع متوسط، فإن هذا المطبخ يكفي في 90٪ من الحالات، ونادرا ما تحدث مشاكل مع الوحدات.

نظرًا لحبي لـ C++، فأنا سعيد جدًا بالدعم الذي توفره Qt للعديد من الأشياء غير التافهة على مستوى الأنظمة الأساسية. اضطررت عدة مرات إلى حل لحظات غير مفهومة بشكل خاص، ولكن هذا هو الحال.

فيش رقم 2. كيو تي سريعة

يعد Qt Quick أسلوبًا رائعًا لإنشاء واجهة مستخدم رسومية. باستخدام لغة تعريفية QML (خمن ​​أين تم اختراعها lol) تشبه JavaScript، يمكنك تحقيق إنتاجية عالية عند إنشاء نماذج أولية للواجهة في التطبيقات أيتعقيد. والشيء المضحك هو أنه مع سير الأمور على هذا النحو، حتى المصمم الذي يعرف بناء جملة JavaScript يمكنه التعامل مع النماذج الأولية للواجهة. ستكون هذه كلها كلمات فارغة إذا لم أعرض لك مثالاً على التعليمات البرمجية الوظيفية (يمكن العثور على المزيد في مشروع Qt - هناك).

استيراد مستطيل QtQuick 2.0 (المعرف: عرض الصفحة: 320؛ الارتفاع: 480 اللون: "رمادي فاتح" النص (المعرف: نص helloText: "مرحبًا بالعالم!" ص: 30 مرساة.horizontalCenter: page.horizontalCenter Font.pointSize: 24؛ الخط. غامق: صحيح) الشبكة (المعرف: colorPicker x: 4؛ مرساة. أسفل: page.bottom؛ مرساة. أسفل الهامش: 4 صفوف: 2؛ أعمدة: 3؛ تباعد: 3 خلايا (cellColor: "أحمر"؛ عند النقر: helloText.color = cellColor ) خلية ( cellColor: "أخضر"؛ عند النقر عليه: helloText.color = cellColor ) خلية ( cellColor: "أزرق"؛ عند النقر عليه: helloText.color = cellColor ) خلية ( cellColor: "أصفر"؛ عند النقر عليه: helloText.color = cellColor ) الخلية (cellColor: "steelblue"؛ عند النقر عليها: helloText.color = cellColor ) الخلية (cellColor: "أسود"؛ عند النقر عليها: helloText.color = cellColor ) )

يعد تنفيذ كائن الخلية أمرًا تافهًا للغاية ويتم تعريفه بهذه الطريقة

استيراد عنصر QtQuick 2.0 (المعرف: الاسم المستعار لخاصية الحاوية cellColor: مستطيل. إشارة اللون التي تم النقر عليها (لون الخلية الملونة) العرض: 40؛ الارتفاع: 25 مستطيل (المعرف: حد المستطيل. اللون: مرساة "بيضاء". تعبئة: الأصل) منطقة الماوس (المراسي. ملء: الأصل عند النقر: Container.clicked(container.cellColor)) ) )

لا يوجد سطر واحد من لغة C++ في هذا الكود وهو يعمل بشكل جيد. انها جيدة، أليس كذلك؟ لقد جعلني أشعر وكأنني ساحر - فمن الأسهل الذهاب إلى المتجر لشراء الخبز بدلاً من إنشاء تطبيق مثل هذا. ومع ذلك، في التطبيقات المعقدة، QML وحده لا يكفي، ونحن ندمجه مع C++. تمت مناقشة هذا الأمر في العديد من المقالات الخاصة بمركز برامج Qt - على سبيل المثال هناك.

فيش رقم 3. مجتمع

حسنًا، لقد وصلنا إلى لحظة ممتعة. إذا تحدثنا عني، فإن عملي مع Qt قليل نسبيًا - منذ 5 سنوات فقط. تعقد شركة Qt أحداثًا سنوية - قمة Qt Developer Days وQt Contributors. لقد كنت في كل واحدة منها مرة واحدة، في العام الماضي، وأعجبني حقًا - مستوى الإعداد مرتفع، ويتم تقديم الانطباعات. كما أتيحت لي الفرصة لـ تواصل مع "قدامى المحاربين" في كيو تي - الأشخاص الذين حضروا القمة لمدة 10 سنوات. أستطيع أن أتخيل كم هو رائع أن ترى نمو مثل هذا المشروع أمام عينيك وأن تكون في مركز كل التطوير - إنه لذيذ فقط .

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

فيش رقم 4. مفتوح المصدر ومراجعة التعليمات البرمجية

تم تطوير Soretz Cut بشكل علني بشكل رئيسي بواسطة Digia (comm.support +)، وKDAB، وICS والمطورين المتحمسين. يتم استضافة الأمر برمته على Gitorious - Tadamts. للمساهمة في تطوير المشروع، عليك أن تمر حازمالتحقق من الكود - آليًا (الامتثال لنمط الكود الذي كتبت عنه سابقًا - ptsss) والإنسان - سيتم فحص الكود الخاص بك من قبل رجال ملتحين لا يثقون بك وسيبحثون عن أبواب خلفية في الكود الخاص بك. هذه كلها عملية معقدة إلى حد ما (مشاكل تتعلق بـ Git/المراجعات في مجلس المراجعة) ومن المحتمل أن أكتب مقالًا عنها في أحد هذه الأيام.

بالمناسبة، لدي بعض الالتزامات في شجرة qtbase، لذا يمكنك أن تسألني في المساء وسأحاول الإجابة على أسئلتك.

فيش رقم 5. ديناميات تطوير المشروع

لقد كانت Qt قيد التطوير لسنوات عديدة، منذ أواخر التسعينيات. خلال هذا الوقت، قامت شركات مثل Trolltech وNokia بالفعل بتشغيل ما يكفي من نسختها التجارية، والآن تقوم Digia بذلك. ولكن هناك شيء واحد مؤكد، وهو أن المشروع حي ومزدهر. لبضع سنوات أخرى، كتب الجميع التصميم باستخدام عناصر واجهة المستخدم (فئات C++، وكلها تعتمد على QWidget)، ولكن اليوم حتى الطفل الصغير يمكنه القيام بذلك. لا أعتقد أن الأمر يستحق القول أنه بالتوازي معه، يتم تطوير أقوى شيء - Qt Creator، الذي يرضي اليوم ليس فقط مبرمجي Qt!

^ رائع Qt Creator، حيث يمكنك إنشاء المعجزات ولن تحصل على أي شيء مقابل ذلك.

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

بالإضافة إلى ذلك، يتم الآن تطوير المنصات بنشاط آي أو إس، أندرويد، ويندوز فون، يمكنك الآن تجميع البرامج لهم!

خلاصة القول

أعتقد أنك تفهم أن كيو تي رائعة حقًا وبعد قراءة المقال، وقعت في حبها بقدر ما أحببتها أنا.
شكرًا لكم على اهتمامكم!