>> الصفحة الرئيسية >> الجزء الاول >> الدرس الاول : كتابة اول برنامج

الأقسام الرئيسية

 التنصيب والاعداد التنصيب والاعداد
 دروس متقدمة دروس متقدمة
 سلسلة دروس للمبتدئين سلسلة دروس للمبتدئين
 اساسيات لغة سي++ اساسيات لغة سي++
 مقالات ZetCode مقالات ZetCode
 

جديد الدروس

 الوحدة QtUiTools (واجهة المستخدم ديناميكية التوليد)
التاريخ 04/07/2009 الوحدة QtUiTools (واجهة المستخدم ديناميكية التوليد)
 Qt and Phonon
التاريخ 04/07/2009 Qt and Phonon
 تتمة الرسائل ومربعات الحوار في qt
التاريخ 04/07/2009 تتمة الرسائل ومربعات الحوار في qt
 مدخل الى xml في Qt
التاريخ 04/07/2009 مدخل الى xml في Qt
 الإدخال والإخراج لبيانات الفئات
التاريخ 04/07/2009 الإدخال والإخراج لبيانات الفئات
 

الدرس الاول : كتابة اول برنامج

السلام عليكم ،،

ساقدم لكم اليوم الدرس الاول من سلسلة دروس للمبتدئين في Qt بحيث اناقش فيها بعض الاساسيات ..
واي شخص لديه سؤال او استفسار فليضعه على المجتمع:
http://qt-ar.org/community

وبسم الله نبدأ..

كتابة وشرح اول برنامج ::

برنامج مرحبا Qt ،،
العادة التقليدية عند البدء في تعلم اي لغة هي برنامج Hello World ،، لكننا سنكسر هذا التقليد ، ونكتب برنامج يقول Hello Qt : .

+++++++++++++++++++++

انشئ مجلد جديد باي اسم ، مثلا hello ، ثم انشئ ملف جديد باي اسم ، مثلا main.cpp “لاحظ ان هذا الاسم متعارف عليه ، حيث يطلق دائما على الملف الذي يحوي الدالة main”

ثم افتح الملف main.cpp باي محرر نصوص تستخدمه او اي IDE ، واكتب الشفرة الاتية :

  1. 1- #include <QApplication>
  2. 2- #include <QPushButton>
  3. 3-
  4. 4- int main(int argc,char* argv[])
  5. 5- {
  6. 6- QApplication app(argc,argv);
  7. 7-
  8. 8- QPushButton* hello=new QPushButton("Hello Qt");
  9. 9-
  10. 10- hello->show();
  11. 11-
  12. 12- return app.exec();
  13. 13-
  14. 14- }


الان احفظ الملف ، ثم اذهب الى سطر الاوامر ، ونفذ الامر :

  1. qmake -project

ثم

  1. qmake


ثم نفذ :

  1. make


ولشتغيل البرنامج نفذ :
  1. ./hello على لينوكس


او
  1. hello في ويندوز


او بالضغط دبل كلك على البرنامج .




الان احضر فنجان قهوة واستمتع بمشاهدة البرنامج ، فهذا البرنامج هو ما كتبه اي محترف Qt في بداية مسيرته.

ولان هذا اول برنامج نكتبه ، فراح نسهب في شرحه قليلا ..

قراءة الشفرة البرمجية :

السطر رقم 1 ، قمنا بعمل تضمين لملف الرأس QApplication ، هذا الملف كأي ملف ينتهي ب .h وظيفته الاعلان عن فئة اسمها QApplication.

السطر رقم 2 ، قمنا بتضمين ملف QPushButton ، وهو ملف يحوي الاعلان عن الفئة QPushButton.

السطر 4 ، الدالة main ، معروفة فهي نقطة انطلاق اي برنامج ، وكذلك الوسائط argc,argv ، للاستزادة راجع موضوع مراجعة سي++ في قسم السي++.

السطر 6 ، قمنا بعمل متغير "كائن" من النوع QApplication ، مع تمرير وسائط سطر الاوامر الى دالة البناء الخاصة بالمتغير app. “سنأتي الى التوضيح لاحقا".

السطر 8 ، قمنا بعمل متغير "كائن" من النوع QPushButton ، وتم انشائه في الذاكرة Heap ، مع تمرير القيمة “Hello Qt” الى دالة البناء.

السطر 10 ، قمنا باستدعاء الدالة show من خلال المتغير hello .

السطر 12 ، تعود الدالة main بالقيمة المعادة من الدالة exec والتي تم استدعائها من خلال المتغير app

++++++++++++++++++++

تحليل الشفرة البرمجية :

السطر 1 و 2 :
Qt تتبع نظاما رائعا في تسمية ملفات الرأس .
اولا ازالت الحرفان .h من ملفاتها ، ثانيا اي فئة في Qt لديها ملف رأس من نفس الاسم.
كذلك اي فئة تنتمى لـ Qt تبدأ بالحرف Q.

فكما نلاحظ اننا استخدمنا فئتين ، هما QApplication و QPushButton ، لذلك يجب ان يتواجد ملفين رأس هما

  1. #include <QApplication>
  2. #include <QPushButton>



السطر 6 :
اي برنامج تكتبه في Qt من الان فصاعدا يجب ان يحوي هذا السطر .
هذا السطر ينشيء متغير app من نوع QApplication ، هذا المتغير app يتحكم في التطبيق بشكل كامل ويديره . يكفي معلومات عنه الان ، سنعود اليه في مواضيع لاحقة.
لكن يجب ان تمرر اليه وسائط سطر الاوامر ، لانه هو المسؤول عن تنفيذها .


السطر 8:
هذه اول فئة رسومية نستخدمها ، واضح من اسمها انها تمثل زر .
تم انشاء المتغير hello “هو مؤشر في الحقيقة ، لكن سأستخدم من الان وصاعدا اسم متغير ، دلالة على المتغير الذي يشير اليه".

المتغير hello من النوع QPushButton ، تم انشائه في ال Heap ، بدون سبب منطقي حاليا !
كان من الممكن ان نكتب هذا السطر بالشكل :
  1. QPushButton hello(“Hello Qt”);


وسيعمل بنفس الاداء . السبب سنعرفه لاحقا. :?

لكن من الان وصاعدا قاعدة يجب التمسك بها : اي كائن رسومي "يعني له شكل ، مثلا زر ، قائمة ، جدول ،...الخ" يجب ان يكون في الذاكرة Heap .
لمعرفة الفروق بين الذاكرة Heap ، والذاكرة Stack قم بمراجعة :
http://qt-ar.org/lessons/show7.html


السطر 10 :
اي كائن رسومي ، عند انشائه يكون مخفي ، اي لا يظهر على الشاشة .
ولاظهاره يجب ان نستدعي الدالة show على هذا الكائن.

ملاحظة : لو استبدلت السطر 8 بهذا السطر

  1. QPushButton hello(“Hello Qt”);


يجب عليك ان تستبدل ايضا السطر 10 بهذا :

  1. hello.show();



السطر 12:
في سي++ القياسية ، كنا نكتب return 0 ، اما الان فالوضع تغير !
الان في البرمجة الرسومية ، يوجد احداث يفعلها مستخدم البرنامج ، مثلا الضعط على الماوس هذا حدث ، تكبير الشاشة حدث ، غلق البرنامج من خلال الضغط على المربع x هذا ايضا حدث!

ولكي يتفاعل البرنامج مع هذه الاحداث ، يجب عليه الدخول في تكرار يسمى event loop .
من خلال هذه الدورة يستطيع البرنامج التقاط الاحداث وتنفيذها .

لذلك يجب دائما في اي برنامج Qt ان نعود ب app.exec() ، لانها هي التي تدخل البرنامج في هذا التكرار.

++++++++++++++++++++

تذكر :
1- اي برنامج يجب ان يحوي متغير من النوع QApplication :
  1. QApplication app(argc,argv);


وكذلك لاتنسى ملف الرأس الخاص به :

  1. #include <QApplication>


ايضا ، القيمة المعادة من الدالة main يجب ان تكون :
  1. return app.exec();


2- الكائن الرسومي : هو كائن له شكل ، مثلا زر او صندوق حوار او ...الخ
لكن كائن يمثل string لا يعتبر كائن رسومي .

الكائنات الرسومية يطلق عليها widgets في Qt ، لذلك من الان وصاعدا :
كلمة widgets تعني كائن له شكل واضح.

++++++++++++++++++

ترجمة البرنامج :

لقد استخدمنا بعض الاوامر لترجمة وتنفيذ البرنامج ، سنتطرق اليهم بشكل موجز الان :

1- الامر : qmake -project
هذا الامر يقوم بعمل مشروع للبرنامج ، اي برنامج تكتبه يجب ان يحوي ملف امتداده .pro
"يسمى ملف المشروع project file “ لكي يتم ترجمة البرنامج .

دعونا نلقي عليه نظرة :

  1. ########################################
  2. # Automatically generated by qmake (2.01a) Wed Jun 25 01:04:32 2008
  3. #########################################
  4.  
  5. TEMPLATE = app
  6. TARGET =
  7. DEPENDPATH += .
  8. INCLUDEPATH += .
  9.  
  10. # Input
  11. SOURCES += main.cpp


ما يهمنا هو قيم المتغيرات .
المتغير TEMPLATE قيمته app يعني ان المشروع لبرنامج "من الممكن ان تكون lib اي مكتبة".
المتغير SOURCES قيمته هي القيمة الحالية + الملفات التي أنشأناها ، وهو ملف واحد.


هذا الملف علينا تحديثه في حالة ما زدنا عدد الملفات ، مثلا انشأنا ملف اسمه car.h ، car.cpp .
في هذه الحالة يجب تنفيذ الامر مرة اخرى حتى يحدث القيم الموجودة بداخله.
لكن في حالة عدنا في الشفرة البرمجية ، فلا يوجد داعي لاعادة انشاء هذا الملف.

يعني فائدة هذا الملف باختصار هو احصاء للملفات الموجودة داخل المجلد "لذلك ان كنت تذكر اني طلبت منك انشاء مجلد جديد في اول الموضوع" .

2- الامر : qmake
هذا برنامج خاص بـ Qt ، وظيفته انشاء ملف يسمى Makefile.

ملف Makefile يحوي الكثير من التفصيلات ، مثلا يحوي اوامر ترجمة ملف ملف في المجلد .
كذلك يحوي على اعتمادية الملفات لبعضها ، يعني مثلا لدي ملف a.cpp يستخدم ملف b.cpp في هذه الحالة الملف a.cpp يعتمد على b.cpp ، اي اذا صدر اي تغيير في محتويات b.cpp فانه يجب اعادة ترجمة b.cpp و a.cpp ، لكن في حالة تم تغيير في شفرة a.cpp فقط ، فلن يتم اعادة ترجمة b.cpp .

تخيل لدينا في المجلد حوالي 50 الى 100 ملف ! هل من المعقول ان نجلس نحصي ونعد من يعتمد على من !

شكرا qmake .


3- الامر : make
هذا الامر يختص بتنفيذ محتويات ملف Makefile ، والذي ذكرنا انه يحوي تفاصيل ترجمة ملف ملف.
اذا النتيجة هي ترجمة البرنامج ، وربطه .
المخرج منها هو البرنامج جاهزا للتنفيذ.

هذا الامر يجب تنفيذه كل مرة يحدث فيها تغيير على الشفرة .

4- الامر : ./hello هو امر لتشغيل الملف التنفيذي في لينوكس .
يقابله hello في ويندوز

او كما ذكرت يمكنك تشغيله بالضغط عليه دبل كلك .
وفي ويندوز راح تجد البرنامج داخل مجلد يسمى release .

+++++++++++++++

اوامر اضافية :

الامر : make distclean
هذا الامر يقوم بمسح جميع الملفات الناتجة من عملية الترجمة وملف Makefile وكذلك يمسح الملف التنفيذي .

الامر : make clean
يحذف الملفات الناتجة من الترجمة فقط.


ا.هـ

إسم الكاتب تاريخ الإضافة التقييم / المقيمين زيارات الدرس
SudaNix 15/09/2008 41 / 6 2074

الأكثر زيارة

 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
الزيارات 4282 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
 اعداد وتنصيب Qt
الزيارات 4068 اعداد وتنصيب Qt
 التطوير السريع للتطبيقات Rapid Application Development
الزيارات 3762 التطوير السريع للتطبيقات Rapid Application Development
 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
الزيارات 3745 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
 C++ In a Nutshell
الزيارات 3151 C++ In a Nutshell
 

الأكثر تصويتـا

 اعداد وتنصيب Qt
نتيجة التصويت 41 من 6 شخص اعداد وتنصيب Qt
 الدرس الاول : كتابة اول برنامج
نتيجة التصويت 41 من 6 شخص الدرس الاول : كتابة اول برنامج
 تخطيط البرامج Program Layout
نتيجة التصويت 40 من 6 شخص تخطيط البرامج Program Layout
 دوال المستوى العالي لبرمجة تطبيقات متعددة المسالك
نتيجة التصويت 30 من 3 شخص دوال المستوى العالي لبرمجة تطبيقات متعددة المسالك
 التطوير السريع للتطبيقات Rapid Application Development
نتيجة التصويت 30 من 5 شخص التطوير السريع للتطبيقات Rapid Application Development
 
 

سكربت story-script v1 برمجة bwady.com تطوير SudaNix