الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الأسئلة الأكثر شيوعا Faq عن ال Qt

بدأه djug في 2 يوليو 2008 · 2 رد · 2,722 مشاهدة · في قسم Cross Platform GUI Libraries العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

مواصلة لمشروع ترجمة مواضيع و مقالات Developpez.com

اليوم مع Faq Qt (الأسئلة الأكثر شيوعا)

عنوان المقال الأصلي: FAQ Qt

رابط المقال الأصلي: http://qt.developpez.com/faq/

الترجمة: Djug

ملاحظة : قد تحتوي الترجمة على أخطاء علمية ( بسبب قلة احتكاكي بالـ Qt ) و/أو لغوية فلا تبخل بتصحيح الأخطاء إما بكتابة مشاركة تتشير إلى ذلك أو بإخبار أحد المشرفين

مقدمة:

ما هي الرخص الخاصة باستعمال Qt ؟

منذ صدور الإصدار الرابع توزع Qt بنوعين من الرخص : مجانية و تجارية و هذا في أنظمة التشغيل Windows linux و OSX

الرخصة المجانية المستعملة هي GPL2 حيث أن كل برنامج مكتوب بإصدار GPL يجب أن يكون هو أيضا GPL

أما بخصوص استعمال النسخة التجارية فينصح باتباع الإرشادات الموجودة في موقع الشركة المنتجة

http://www.trolltech.com/products/qt/licenses

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

أين نجد دروسا حول Qt ؟

توفر Trolltech مجموعة من الدروس الكافية و الوافية عن كل إصدار من إصداراتها

يمكنك الحصول على هذه الدروس من هنا

http://doc.trolltech.com/

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

ما هي ملفات الـ header التي يجب إرفاقها لدى ترجمة برامج Qt؟

أولا تجب الإشارة إلى وجود نوعين من الـ headers

الأول هو النوع القياسي(standard ) و يتميز بالامتداد .h

أما النوع الثاني فلا يحتوي على امتداد

لكي تتم عملية الترجمة بصورة جيدة يجب أن يكون مسار الـ header المستعملة ضمن مجموعة المجلدات الـ headers المبحوث فيها

إضافة إلى أنه يجب إضافة الـ header <QXXX> استعمالك للـ class QXXX

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

عموميات:

هل فعلا استعمال Qt معقد ؟

في حقيقة الأمر استعمال Qt أسهل مما نتصور

لنأخذ المثال التالي الذي يقوم بإظهار Button يقوم بإغلاق البرنامج لدى الضغط عليه (لا يتجاوز 12 سطر)

  1.  
  2. #include <QApplication> // ضروري لإنشاء تطبيق Qt
  3. #include <QPushButton> // ضروري لإنشاء Button
  4.  
  5. int main(int argc, char **argv) // الدالة main كما هو مستعمل عادة
  6. {
  7. QApplication app(argc, argv); // استرجاع الـ arguments
  8. QPushButton quit("Hello World!"); //إنشاء الـ Button المعنون "Hello World"
  9. quit.resize(300, 40); // و نغير من حجمه
  10. quit.setFont(QFont("Arial", 18, QFont::Bold)); // نغير خصائص الخط المستعمل
  11. QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); //هنا نخبر Qt أنه يجب إنهاء البرنامج لدى عمل click على الـ button
  12. quit.show(); // نقوم بإظهار الـ Button
  13. return app.exec(); // هنا Qt يتولى أمر إرجاع القيمة المناسبة لدى انتهاء البرنامج
  14.  
  15. }
  16.  
  17.  

كما تلاحظون فإنه من السهل جدا إنشاء و استعمال Button

لمزيد من التفاصيل لا يوجد أفصل من الدروس الرسمية المقدمة من شركة Trolltech

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

كيف تتم ترجمة مشروع باستعمال Qt4 ؟

يقترح مطوروا Qt4 عدة وسائل لتسهيل إدارة المشاريع باستعمال Qt4

فمثلا توجد أداة لتحويل ملقات .ui إلى ملفات c++.

و أداة أخرى لتوليد الكود اللازم لإنشاء الـ widgets

إضافة إلى وجود أداة Qmake و التي تسمح بخوصصة جميع مراحل الترجمة (مثل توليد ملف .pro و تحديد قواعد الترجمة من هذا الملف .. و استكشاف الـمترجم المستعمل و مجلد تنصيب الـ Qt ...)

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

محتوى Qt4

على ماذا تحتوي Qt4؟

قسمت Qt4 إلى عدة مكتبات فرعية مستقلة نسبيا عن بعضها البعض

• QtCore, تحتوي على المكونات الأساسية للسير الحسن لجميع مكتبات Qt

• QtGui تحتوي على المكونات الأساسية المتعلقة بالـواجهة الرسومية المستعملة من طرف باقي المكتبات

• QtNetwork تحتوي على الـ Class الخاصة بالبرمجة على الشبكة

• QtOpenGL لاستعمال OpenGL

• QtSql لاستعمال قواعد البيانات

• QtSvg لكتابة و قراءة ملفات SVG

• QtXml لكتابة و قراءة ملفات XML

• QtAssistant الـ help الخاص بالـ Qt

• Qt3Support للسماح باستعمال مكتبات الإصدار 3 من Qt

• QtTest لعمل Tests

• QtDesigner

• QtUiTools

كل واحدة من هذه المكتبات يمكن إضافتها أو إزالتها من مشاريع Qt (حسب الحاجة) علما أنه تتم إضافة QtCore و QtGui قياسيا إلى جميع المشاريع.

http://doc.trolltech.com/4.2/modules.html

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

QtCore :

لماذا نستعمل New دون إتباعها بـ Delete ؟

نلاحظ عادة في برامج مكتوبة بـ Qt4 وجود new لكن ليست متبوعة بـ Delete

يعود ذلك إلى إنه لدى إنشاء QObject نقوم بتحديد " أب" لهذا QObject (الـ Argument الأول في الـ Constructor )

هذا الأب توكل له مهمة إتلاف الابن عندما تدعو الحاجة إلى ذلك.

أغلبية (و ليس كلية) Class الـ Qt ترث بصفة مباشرة أو غير مباشرة من QObject

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

Signal و Slot

قامت Trolltech بعمل signals و slots اعتمادا على Pattern observer

هذا الـ Pattern يقوم بـ"توقع" الـ class التي تترقب Event ما

لاستعمال هذا النظام يجب التوريث من QObject إما بطريقة مباشرة أو عن طريق كائنات مستقة من QObject.

و من ثم يجب تعريف الـ macro Q_OBJECT و التي يحتاجها كل من qmake و moc لتوليد الكود اللازم لاستعمال هذه الدوال

لإنشاء signal

  1.  
  2. signal:
  3. void mySignal();
  4.  
  5.  

و لمناداة هذا الـ signal

  1.  
  2. emit mySignal();
  3.  
  4.  

يمكن ربط (connect)هذه signals مع signals أخرى أو slots

الـ slots عبارة عن دوال يكتبها المبرمج تتم مناداتها لدى الحاجة إلى ذلك

  1.  
  2. public slots:
  3. void mySlot();
  4.  
  5.  

الـ slots عبارة عن دوال يكتبها المبرمج تتم مناداتها لدى الحاجة إلى ذلك

بعد الانتهاء من كتابة الـ slots و الـ signals تبقى عملية الربط بينها.

بما أن الربط يكون مباشرا فإنه يستحيل ربط signal بدون parameter مع slot بـ parameter

من أجل هذا يجب استعمال QSignalMapper

  1.  
  2. connect(this, SIGNAL(monSignal(), somethingElse, SLOT(monSlot()));;
  3.  
  4.  

لمزيد من التفاصيل

. http://doc.trolltech.com/4.2/signalsandslots.html

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

underfined reference to 'vtable for xxx'

تظهر رسالة الخطأ هذه حي حالة ما إذا كان القسم QObject لـ class معين لم تتم إضافته لدى عمل الـ linking

حيث أنه لدى استعمال الـ macro Q_OBJECT نقوم بكتابة مجموعة من الدوال و المتغيرات و التي تكون static

يولد qmake ملفا باستعمال الأداة moc يحتوي مجموع هذه الدوال و المتغيرات

ملاحظة: يمكنك إنشاء هذا الملف يدويا و استعماله حين الترجمة و linking

http://doc.trolltech.com/4.2/qobject.html

. http://doc.trolltech.com/4.2/signalsandslots.html

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

كيف نفتح برنامجا ما باستعمال Qt ؟

تسمح Qt بفتح برنامج ما و التعامل معه و ذلك بفصل الـ class QProcess

هذه العملية تتم إما باستعمال الدالة start

أو باستعمال الدالة QProcess::execute

يجب التنويه إلى أن البرنامج المفتوح يعتبر كـ porcess ابن أي أنه لدى علق البرنامج الأب فإن البرنامج الابن يغلق بطريقة أوتوماتيكية

أما إذا أردت أن يبقى البرنامج مستغلا حتى بعد غلق البرنامج الأب فلا مفر من استعمال الدالة QProcess::startDetached

  1.  
  2. #include <QtGui>
  3.  
  4. class MyQPushButton : public QPushButton
  5. {
  6. public :
  7. //
  8. //text : النص الظاهر على الـ button
  9. //exe : الأمر المطبق لدى الضغط على الـ button.
  10. MyQPushButton(const QString & text,const QString & exe, QWidget * parent = 0):QPushButton (text,parent),m_exe(exe){resize(75, 30);setFont(QFont("Times", 18, QFont::Bold));};
  11. virtual void mouseReleaseEvent ( QMouseEvent * event )
  12. {
  13. //تطبيق الأمر في process مستقل
  14. QProcess::startDetached (m_exe);
  15. }
  16.  
  17. private :
  18. QString m_exe;
  19.  
  20. };
  21. int main(int argc, char* argv[])
  22. {
  23. QApplication app(argc, argv);
  24. QWidget w;
  25. QVBoxLayout vl(&w);
  26. //فتح صفحة web عن طريق cmd
  27. MyQPushButton bouton1("Open DVP / Qt","cmd /c start <a href="http://qt.developpez.com/",&w);" target="_blank">http://qt.developpez.com/",&w);</a>
  28.  
  29. //فتح notepad
  30. MyQPushButton bouton2("Open notepad","notepad",&w);
  31.  
  32. //فتح cmd
  33. MyQPushButton bouton3("Open CMD","cmd" ,&w);
  34. vl.addWidget(&bouton1);
  35. vl.addWidget(&bouton2);
  36. vl.addWidget(&bouton3);
  37. w.show();
  38. return app.exec();
  39. }
  40.  
  41.  
  42.  

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

QtGUI

كيف يتم تغيير style النافذة

يكفي إضافة هذا السطر

  1.  
  2. QApplication::setStyle(new QPlastiqueStyle);
  3.  
  4.  

إذا كان QPlastiqueStyle هو الـ style الذي تريده

يتبع

تم تعديل هذه المشاركة بواسطة djug في 2 يوليو 2008 في 21:56

#2

بارك الله فيك شرح مميز وموفق.

tvquran_6.gif

#3

مشكور أخي العزيز اسئلة جدا جميلة بعضها خفى علي

الله يوفقق

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

مواضيع مشابهة