|
|
|
[7] I - كائنات Qt4 |
|
في هذا الدرس سوف نتحدث عن الكائنات الرسومية widgets لـ Qt
تعتبر الكائنات الرسومية القطع الأساسية لبناء برامج gui. ومكتبة Qt4 غنية بمختلف الكائنات.
QLabel
البطاقة QLabel يستخدم لعرض نص أو صورة. لا يتيح أي نوع من التفاعل مع المستخدم. المثال التالي سوف يعرض نصا:
"label.h"
#ifndef LABEL_H #define LABEL_H #include <QWidget> #include <QApplication> #include <QLabel> { public: private: }; #endif
|
هذا هو ملف الهيدر headerfile لمثالنا.
"label.cpp"
#include "label.h" #include <QVBoxLayout> #include <QFont> { QString lyrics = "Who doesn't long for someone to holdn Who knows how to love you without being toldn Somebody tell me why I'm on my ownn If there's a soulmate for everyonen n Here we are again, circles never endn How do I find the perfect fitn There's enough for everyonen But I'm still waiting in linen n Who doesn't long for someone to holdn Who knows how to love you without being toldn Somebody tell me why I'm on my ownn If there's a soulmate for everyone"; label = new QLabel(lyrics , this); label ->setFont(QFont("Purisa", 10)); vbox->addWidget(label); setLayout(vbox); }
|
لقد استخدمنا الـ QLabel لعرض قصائد غنائية في نافذة.
label = new QLabel(lyrics, this);
label->setFont(QFont("Purisa", 10));
|
أنشأنا بطاقة وضبطنا الخط لنوع معين.
"main.cpp"
#include "label.h" #include <QTextStream> #include <QDesktopWidget> { int x, y; int screenWidth; int screenHeight; int width, height; width = widget.frameGeometry().width(); height = widget.frameGeometry().height(); screenWidth = desktop->width(); screenHeight = desktop->height(); x = (screenWidth - width) / 2; y = (screenHeight - height) / 2; widget.move( x, y ); } int main(int argc, char *argv[]) { Label window; window.setWindowTitle("QSlider"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

QSlider
المنزلق QSlider عبارة عن كائن لديه مقبض بسيط. هذا المقبض يمكن سحبه جيئه وذهابا. بهذه الطريقة نحن نقوم باختيار قيمة لمهمة معينة.
"slider.h"
#ifndef SLIDER_H #define SLIDER_H #include <QWidget> #include <QApplication> #include <QSlider> #include <QLabel> { Q_OBJECT public: private: }; #endif
|
ملف الهيدر header file لمثالنا.
"slider.cpp"
#include "slider.h" #include <QDesktopWidget> void center (QWidget *widget , int w , int h ) { int x, y; int screenWidth; int screenHeight; screenWidth = desktop->width(); screenHeight = desktop->height(); x = (screenWidth - w) / 2; y = (screenHeight - h) / 2; widget->move( x, y ); } { int WIDTH = 300; int HEIGHT = 140; resize(WIDTH, HEIGHT); slider = new QSlider(Qt ::Horizontal , this); slider->setGeometry(50, 50, 130, 30); label = new QLabel("0", this); label->setGeometry(230, 50, 20, 30); connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int))); center(this, WIDTH, HEIGHT); }
|
لقد عرضنا كائنين: منزلق وبطاقة. المنزلق سوف يتحكم بالقيمة التي تعرضها البطاقة.
connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));
|
هنا قمنا بربط اشارة value changed بالـ slot السابق تعريفه setNum
"main.cpp"
#include "slider.h" int main(int argc, char *argv[]) { Slider window; window.setWindowTitle("QSlider"); window.show(); return app.exec(); }
|
ملف الـ main
والنتيجة:

QSpinBox
QSpinBox هو كائن يستخدم لحمل أعداد صحيحة ومجموعة مختلفة من القيم.
في مثالنا سوف يكون لدينا QSpinBox واحد. يمكننا اختيار عدد من 0 إلى 99. القيمة المختارة حاليا سوف تُعرض في عنوان النافذة.
"spinbox.h"
#ifndef SPINBOX_H #define SPINBOX_H #include <QWidget> #include <QApplication> #include <QSpinBox> { Q_OBJECT public: private slots: void setTitle(int); private: }; #endif
|
ملف الهيدر header file لمثالنا.
"spinbox.cpp"
#include "spinbox.h" { spinbox->setGeometry(50, 50, 60, 30); connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(setTitle(int))); } void SpinBox::setTitle(int val) { setWindowTitle (QString::number(val ));}
|
وضعنا spin box في النافذة. وربطنا اشارة تغير القيمة valueChanged بطريقة ضبط العنوان setTitle
void SpinBox::setTitle(int val)
{
setWindowTitle(QString::number(val));
}
|
طريقة ضبط العنوان setTitle سوف تضبط عنوان النافذه ليكون الرقم الحالي المختار في الـ QSpinBox
"main.cpp"
#include "spinbox.h" #include <QDesktopWidget> { int x, y; int screenWidth; int screenHeight; int WIDTH = 250; int HEIGHT = 170; screenWidth = desktop->width(); screenHeight = desktop->height(); x = (screenWidth - WIDTH) / 2; y = (screenHeight - HEIGHT) / 2; widget.setGeometry(x, y, WIDTH, HEIGHT); } int main(int argc, char *argv[]) { SpinBox window; window.setWindowTitle("0"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

QLineEdit
المحرر الخطي QLineEdit هو كائن يسمح بادخال وتحرير سطر من النص العادي. كما يملك هذا المحرر خواص التراجع/الغاء التراجع ، قص/نسخ ، السحب/الافلات.
في مثالنا هذه المرة نعرض ثلاث بطاقات وثلاث محررات خطية.
"ledit.h"
#ifndef LEDIT_H #define LEDIT_H #include <QWidget> { public: }; #endif
|
ملف الهيدر لمثالنا.
"ledit.cpp"
#include "ledit.h" #include <QGridLayout> #include <QLabel> #include <QLineEdit> { grid->addWidget(name, 0, 0); grid->addWidget(le1, 0, 1); grid->addWidget(age, 1, 0); grid->addWidget(le2, 1, 1); grid->addWidget(occupation, 2, 0); grid->addWidget(le3, 2, 1); setLayout(grid); }
|
أنشأنا ثلاث بطاقات وثلاث محررات خطية. تم ترتيبها بتنظيم المخطط الشبكي QGridLayout.
"main.cpp"
#include "ledit.h" #include <QDesktopWidget> #include <QApplication> { int x, y; int screenWidth; int screenHeight; int WIDTH = 250; int HEIGHT = 170; screenWidth = desktop->width(); screenHeight = desktop->height(); x = (screenWidth - WIDTH) / 2; y = (screenHeight - HEIGHT) / 2; widget.setGeometry(x, y, WIDTH, HEIGHT); } int main(int argc, char *argv[]) { Ledit window; window.setWindowTitle("QLineEdit"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

Statusbar
شريط الحالة Statusbar عبارة عن لوحة تعرض معلومات تتعلق بحالة البرنامج.
في مثالنا الحالي لدينا زران وشريط حالة. كل من الزران يعرض رسالة عندما نضغط عليهما. شريط الحالة هو جزء من الكائن QMainWindow.
"statusbar.h"
#ifndef STATUSBAR_H #define STATUSBAR_H #include <QMainWindow> #include <QPushButton> { Q_OBJECT public: private slots: void OnOkPressed(); void OnApplyPressed(); private: }; #endif
|
ملف الهيدر.
"statusbar.cpp"
statusbar.cpp #include "statusbar.h" #include <QGridLayout> #include <QLabel> #include <QFrame> #include <QStatusBar> Statusbar ::Statusbar(QWidget *parent ){ setCentralWidget(frame); ok->move(20, 50); apply->move(120, 50); statusBar(); connect(ok, SIGNAL(clicked()), this, SLOT(OnOkPressed())); connect(apply, SIGNAL(clicked()), this, SLOT(OnApplyPressed())); } void Statusbar::OnOkPressed() { statusBar()->showMessage("OK button pressed", 2000); } void Statusbar::OnApplyPressed() { statusBar()->showMessage("Apply button pressed", 2000); }
|
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() التابعة للكائن QMainWindow.
void Statusbar::OnOkPressed()
{
statusBar()->showMessage("OK button pressed", 2000);
}
|
طريقة showMessage تقوم بعرض الرسالة على شريط الحالة
"main.cpp"
#include "statusbar.h" #include <QDesktopWidget> #include <QApplication> { int x, y; int screenWidth; int screenHeight; int WIDTH = 250; int HEIGHT = 170; screenWidth = desktop->width(); screenHeight = desktop->height(); x = (screenWidth - WIDTH) / 2; y = (screenHeight - HEIGHT) / 2; widget.setGeometry(x, y, WIDTH, HEIGHT); } int main(int argc, char *argv[]) { Statusbar window; window.setWindowTitle("QStatusBar"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

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