>> الصفحة الرئيسية >> مقالات ZetCode >> [7] I - كائنات Qt4

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

 التنصيب والاعداد التنصيب والاعداد
 دروس متقدمة دروس متقدمة
 سلسلة دروس للمبتدئين سلسلة دروس للمبتدئين
 اساسيات لغة سي++ اساسيات لغة سي++
 مقالات 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 الإدخال والإخراج لبيانات الفئات
 

[7] I - كائنات Qt4

في هذا الدرس سوف نتحدث عن الكائنات الرسومية widgets لـ Qt

تعتبر الكائنات الرسومية القطع الأساسية لبناء برامج gui. ومكتبة Qt4 غنية بمختلف الكائنات.

QLabel
البطاقة QLabel يستخدم لعرض نص أو صورة. لا يتيح أي نوع من التفاعل مع المستخدم. المثال التالي سوف يعرض نصا:

"label.h"

  1.  
  2. #ifndef LABEL_H
  3. #define LABEL_H
  4.  
  5. #include <QWidget>
  6. #include <QApplication>
  7. #include <QLabel>
  8.  
  9. class Label : public QWidget
  10. {
  11. public:
  12. Label(QWidget *parent = 0);
  13.  
  14. private:
  15. QLabel *label;
  16.  
  17. };
  18.  
  19. #endif
  20.  

هذا هو ملف الهيدر headerfile لمثالنا.


"label.cpp"
  1.  
  2. #include "label.h"
  3. #include <QVBoxLayout>
  4. #include <QFont>
  5.  
  6.  
  7. Label::Label(QWidget *parent)
  8. : QWidget(parent)
  9. {
  10.  
  11. QString lyrics = "Who doesn't long for someone to holdn
  12. Who knows how to love you without being toldn
  13. Somebody tell me why I'm on my ownn
  14. If there's a soulmate for everyonen
  15. n
  16. Here we are again, circles never endn
  17. How do I find the perfect fitn
  18. There's enough for everyonen
  19. But I'm still waiting in linen
  20. n
  21. Who doesn't long for someone to holdn
  22. Who knows how to love you without being toldn
  23. Somebody tell me why I'm on my ownn
  24. If there's a soulmate for everyone";
  25.  
  26. label = new QLabel(lyrics, this);
  27. label->setFont(QFont("Purisa", 10));
  28.  
  29. QVBoxLayout *vbox = new QVBoxLayout();
  30. vbox->addWidget(label);
  31. setLayout(vbox);
  32.  
  33. }
  34.  



لقد استخدمنا الـ QLabel لعرض قصائد غنائية في نافذة.



label = new QLabel(lyrics, this);
label->setFont(QFont("Purisa", 10));

أنشأنا بطاقة وضبطنا الخط لنوع معين.




"main.cpp"
  1.  
  2. #include "label.h"
  3. #include <QTextStream>
  4. #include <QDesktopWidget>
  5.  
  6. void center(QWidget &widget)
  7. {
  8. int x, y;
  9. int screenWidth;
  10. int screenHeight;
  11. int width, height;
  12. QSize windowSize;
  13.  
  14. QDesktopWidget *desktop = QApplication::desktop();
  15.  
  16. width = widget.frameGeometry().width();
  17. height = widget.frameGeometry().height();
  18.  
  19. screenWidth = desktop->width();
  20. screenHeight = desktop->height();
  21.  
  22. x = (screenWidth - width) / 2;
  23. y = (screenHeight - height) / 2;
  24.  
  25. widget.move( x, y );
  26.  
  27. }
  28.  
  29.  
  30. int main(int argc, char *argv[])
  31. {
  32. QApplication app(argc, argv);
  33.  
  34. Label window;
  35.  
  36. window.setWindowTitle("QSlider");
  37. window.show();
  38. center(window);
  39.  
  40. return app.exec();
  41. }
  42.  

ملف الـ main


والنتيجة:



QSlider
المنزلق QSlider عبارة عن كائن لديه مقبض بسيط. هذا المقبض يمكن سحبه جيئه وذهابا. بهذه الطريقة نحن نقوم باختيار قيمة لمهمة معينة.


"slider.h"
  1.  
  2. #ifndef SLIDER_H
  3. #define SLIDER_H
  4.  
  5. #include <QWidget>
  6. #include <QApplication>
  7. #include <QSlider>
  8. #include <QLabel>
  9.  
  10. class Slider : public QWidget
  11. {
  12. Q_OBJECT
  13.  
  14. public:
  15. Slider(QWidget *parent = 0);
  16.  
  17. private:
  18. QSlider *slider;
  19. QLabel *label;
  20.  
  21. };
  22.  
  23. #endif
  24.  

ملف الهيدر header file لمثالنا.



"slider.cpp"
  1.  
  2. #include "slider.h"
  3. #include <QDesktopWidget>
  4.  
  5. void center(QWidget *widget, int w, int h)
  6. {
  7. int x, y;
  8. int screenWidth;
  9. int screenHeight;
  10.  
  11. QDesktopWidget *desktop = QApplication::desktop();
  12.  
  13. screenWidth = desktop->width();
  14. screenHeight = desktop->height();
  15.  
  16. x = (screenWidth - w) / 2;
  17. y = (screenHeight - h) / 2;
  18.  
  19. widget->move( x, y );
  20. }
  21.  
  22.  
  23. Slider::Slider(QWidget *parent)
  24. : QWidget(parent)
  25. {
  26. int WIDTH = 300;
  27. int HEIGHT = 140;
  28.  
  29. resize(WIDTH, HEIGHT);
  30.  
  31. slider = new QSlider(Qt::Horizontal , this);
  32. slider->setGeometry(50, 50, 130, 30);
  33.  
  34.  
  35. label = new QLabel("0", this);
  36. label->setGeometry(230, 50, 20, 30);
  37.  
  38. connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));
  39.  
  40. center(this, WIDTH, HEIGHT);
  41.  
  42. }
  43.  


لقد عرضنا كائنين: منزلق وبطاقة. المنزلق سوف يتحكم بالقيمة التي تعرضها البطاقة.



connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));

هنا قمنا بربط اشارة value changed بالـ slot السابق تعريفه setNum


"main.cpp"
  1.  
  2. #include "slider.h"
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication app(argc, argv);
  7.  
  8. Slider window;
  9.  
  10. window.setWindowTitle("QSlider");
  11. window.show();
  12.  
  13. return app.exec();
  14. }
  15.  

ملف الـ main


والنتيجة:




QSpinBox

QSpinBox هو كائن يستخدم لحمل أعداد صحيحة ومجموعة مختلفة من القيم.

في مثالنا سوف يكون لدينا QSpinBox واحد. يمكننا اختيار عدد من 0 إلى 99. القيمة المختارة حاليا سوف تُعرض في عنوان النافذة.



"spinbox.h"
  1.  
  2. #ifndef SPINBOX_H
  3. #define SPINBOX_H
  4.  
  5. #include <QWidget>
  6. #include <QApplication>
  7. #include <QSpinBox>
  8.  
  9. class SpinBox : public QWidget
  10. {
  11. Q_OBJECT
  12.  
  13. public:
  14. SpinBox(QWidget *parent = 0);
  15.  
  16. private slots:
  17. void setTitle(int);
  18.  
  19. private:
  20. QSpinBox *spinbox;
  21.  
  22. };
  23.  
  24. #endif
  25.  

ملف الهيدر header file لمثالنا.


"spinbox.cpp"
  1.  
  2. #include "spinbox.h"
  3.  
  4. SpinBox::SpinBox(QWidget *parent)
  5. : QWidget(parent)
  6. {
  7. spinbox = new QSpinBox(this);
  8. spinbox->setGeometry(50, 50, 60, 30);
  9.  
  10. connect(spinbox, SIGNAL(valueChanged(int)),
  11. this, SLOT(setTitle(int)));
  12.  
  13. }
  14.  
  15. void SpinBox::setTitle(int val)
  16. {
  17. setWindowTitle(QString::number(val));
  18. }
  19.  


وضعنا spin box في النافذة. وربطنا اشارة تغير القيمة valueChanged بطريقة ضبط العنوان setTitle


void SpinBox::setTitle(int val)
{
setWindowTitle(QString::number(val));
}

طريقة ضبط العنوان setTitle سوف تضبط عنوان النافذه ليكون الرقم الحالي المختار في الـ QSpinBox



"main.cpp"
  1.  
  2. #include "spinbox.h"
  3. #include <QDesktopWidget>
  4.  
  5. void center(QWidget &widget)
  6. {
  7. int x, y;
  8. int screenWidth;
  9. int screenHeight;
  10.  
  11. int WIDTH = 250;
  12. int HEIGHT = 170;
  13.  
  14.  
  15. QDesktopWidget *desktop = QApplication::desktop();
  16.  
  17. screenWidth = desktop->width();
  18. screenHeight = desktop->height();
  19.  
  20. x = (screenWidth - WIDTH) / 2;
  21. y = (screenHeight - HEIGHT) / 2;
  22.  
  23. widget.setGeometry(x, y, WIDTH, HEIGHT);
  24.  
  25. }
  26.  
  27.  
  28. int main(int argc, char *argv[])
  29. {
  30. QApplication app(argc, argv);
  31.  
  32. SpinBox window;
  33.  
  34. window.setWindowTitle("0");
  35. window.show();
  36. center(window);
  37.  
  38. return app.exec();
  39. }
  40.  

ملف الـ main


والنتيجة:




QLineEdit
المحرر الخطي QLineEdit هو كائن يسمح بادخال وتحرير سطر من النص العادي. كما يملك هذا المحرر خواص التراجع/الغاء التراجع ، قص/نسخ ، السحب/الافلات.

في مثالنا هذه المرة نعرض ثلاث بطاقات وثلاث محررات خطية.


"ledit.h"
  1.  
  2. #ifndef LEDIT_H
  3. #define LEDIT_H
  4.  
  5. #include <QWidget>
  6.  
  7. class Ledit : public QWidget
  8. {
  9. public:
  10. Ledit(QWidget *parent = 0);
  11.  
  12. };
  13.  
  14. #endif
  15.  

ملف الهيدر لمثالنا.


"ledit.cpp"
  1.  
  2. #include "ledit.h"
  3. #include <QGridLayout>
  4. #include <QLabel>
  5. #include <QLineEdit>
  6.  
  7. Ledit::Ledit(QWidget *parent)
  8. : QWidget(parent)
  9. {
  10.  
  11. QLabel *name = new QLabel("Name:", this);
  12. QLabel *age = new QLabel("Age:", this);
  13. QLabel *occupation = new QLabel("Occupation:", this);
  14.  
  15. QLineEdit *le1 = new QLineEdit(this);
  16. QLineEdit *le2 = new QLineEdit(this);
  17. QLineEdit *le3 = new QLineEdit(this);
  18.  
  19. QGridLayout *grid = new QGridLayout();
  20.  
  21. grid->addWidget(name, 0, 0);
  22. grid->addWidget(le1, 0, 1);
  23. grid->addWidget(age, 1, 0);
  24. grid->addWidget(le2, 1, 1);
  25. grid->addWidget(occupation, 2, 0);
  26. grid->addWidget(le3, 2, 1);
  27.  
  28. setLayout(grid);
  29. }
  30.  


أنشأنا ثلاث بطاقات وثلاث محررات خطية. تم ترتيبها بتنظيم المخطط الشبكي QGridLayout.


"main.cpp"
  1.  
  2. #include "ledit.h"
  3. #include <QDesktopWidget>
  4. #include <QApplication>
  5.  
  6. void center(QWidget &widget)
  7. {
  8. int x, y;
  9. int screenWidth;
  10. int screenHeight;
  11.  
  12. int WIDTH = 250;
  13. int HEIGHT = 170;
  14.  
  15.  
  16. QDesktopWidget *desktop = QApplication::desktop();
  17.  
  18. screenWidth = desktop->width();
  19. screenHeight = desktop->height();
  20.  
  21. x = (screenWidth - WIDTH) / 2;
  22. y = (screenHeight - HEIGHT) / 2;
  23.  
  24. widget.setGeometry(x, y, WIDTH, HEIGHT);
  25.  
  26. }
  27.  
  28.  
  29. int main(int argc, char *argv[])
  30. {
  31. QApplication app(argc, argv);
  32.  
  33. Ledit window;
  34.  
  35. window.setWindowTitle("QLineEdit");
  36. window.show();
  37. center(window);
  38.  
  39. return app.exec();
  40. }
  41.  

ملف الـ main


والنتيجة:



Statusbar
شريط الحالة Statusbar عبارة عن لوحة تعرض معلومات تتعلق بحالة البرنامج.

في مثالنا الحالي لدينا زران وشريط حالة. كل من الزران يعرض رسالة عندما نضغط عليهما. شريط الحالة هو جزء من الكائن QMainWindow.


"statusbar.h"
  1.  
  2. #ifndef STATUSBAR_H
  3. #define STATUSBAR_H
  4.  
  5. #include <QMainWindow>
  6. #include <QPushButton>
  7.  
  8. class Statusbar : public QMainWindow
  9. {
  10. Q_OBJECT
  11.  
  12. public:
  13. Statusbar(QWidget *parent = 0);
  14.  
  15. private slots:
  16. void OnOkPressed();
  17. void OnApplyPressed();
  18.  
  19. private:
  20. QPushButton *apply;
  21.  
  22. };
  23.  
  24. #endif
  25.  

ملف الهيدر.


"statusbar.cpp"
  1.  
  2. statusbar.cpp
  3. #include "statusbar.h"
  4. #include <QGridLayout>
  5. #include <QLabel>
  6. #include <QFrame>
  7. #include <QStatusBar>
  8.  
  9. Statusbar::Statusbar(QWidget *parent)
  10. : QMainWindow(parent)
  11. {
  12.  
  13. QFrame *frame = new QFrame(this);
  14. setCentralWidget(frame);
  15.  
  16. ok = new QPushButton("OK", frame);
  17. ok->move(20, 50);
  18.  
  19. apply = new QPushButton("Apply", frame);
  20. apply->move(120, 50);
  21.  
  22. statusBar();
  23.  
  24. connect(ok, SIGNAL(clicked()), this, SLOT(OnOkPressed()));
  25. connect(apply, SIGNAL(clicked()), this, SLOT(OnApplyPressed()));
  26. }
  27.  
  28. void Statusbar::OnOkPressed()
  29. {
  30. statusBar()->showMessage("OK button pressed", 2000);
  31. }
  32.  
  33. void Statusbar::OnApplyPressed()
  34. {
  35. statusBar()->showMessage("Apply button pressed", 2000);
  36. }
  37.  




QFrame *frame = new QFrame(this);
setCentralWidget(frame);

الكائن QFrame وُضع في مركز النافذه QMainWindow.



ok = new QPushButton("OK", frame);
ok->move(20, 50);

apply = new QPushButton("Apply", frame);
apply->move(120, 50);

أنشأنا زران وحددنا موقعهما.



statusBar();

لعرض شريط الحالة نستدعي طريقة statusBar() التابعة للكائن QMainWindow.



void Statusbar::OnOkPressed()
{
statusBar()->showMessage("OK button pressed", 2000);
}

طريقة showMessage تقوم بعرض الرسالة على شريط الحالة



"main.cpp"
  1.  
  2. #include "statusbar.h"
  3. #include <QDesktopWidget>
  4. #include <QApplication>
  5.  
  6. void center(QWidget &widget)
  7. {
  8. int x, y;
  9. int screenWidth;
  10. int screenHeight;
  11.  
  12. int WIDTH = 250;
  13. int HEIGHT = 170;
  14.  
  15.  
  16. QDesktopWidget *desktop = QApplication::desktop();
  17.  
  18. screenWidth = desktop->width();
  19. screenHeight = desktop->height();
  20.  
  21. x = (screenWidth - WIDTH) / 2;
  22. y = (screenHeight - HEIGHT) / 2;
  23.  
  24. widget.setGeometry(x, y, WIDTH, HEIGHT);
  25.  
  26. }
  27.  
  28.  
  29. int main(int argc, char *argv[])
  30. {
  31. QApplication app(argc, argv);
  32.  
  33. Statusbar window;
  34.  
  35. window.setWindowTitle("QStatusBar");
  36. window.show();
  37. center(window);
  38.  
  39. return app.exec();
  40. }
  41.  

ملف الـ main


والنتيجة:



نلقاكم بالجزء الثاني ..

إسم الكاتب تاريخ الإضافة التقييم / المقيمين زيارات الدرس
Shanx 13/01/2009 1 / 1 720

الأكثر زيارة

 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
الزيارات 2849 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
 اعداد وتنصيب Qt
الزيارات 2627 اعداد وتنصيب Qt
 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
الزيارات 2576 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
 التطوير السريع للتطبيقات Rapid Application Development
الزيارات 2420 التطوير السريع للتطبيقات Rapid Application Development
 C++ In a Nutshell
الزيارات 2293 C++ In a Nutshell
 

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

 اعداد وتنصيب Qt
نتيجة التصويت 40 من 5 شخص اعداد وتنصيب Qt
 تخطيط البرامج Program Layout
نتيجة التصويت 40 من 6 شخص تخطيط البرامج Program Layout
 الدرس الاول : كتابة اول برنامج
نتيجة التصويت 29 من 3 شخص الدرس الاول : كتابة اول برنامج
 التطوير السريع للتطبيقات Rapid Application Development
نتيجة التصويت 29 من 4 شخص التطوير السريع للتطبيقات Rapid Application Development
 الدرس الثالث:تعريف slot جديدة
نتيجة التصويت 27 من 3 شخص الدرس الثالث:تعريف slot جديدة
 
 

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