|
|
|
[8] II - كائنات Qt4 |
|
في هذا الدرس سنواصل الحديث عن الكائنات الرسومية لـ Qt4 .
QCheckBox
صندوق الاختيار QCheckBox هو كائن لديه حالتين: تشغيل و تعطيل. هو صندوق مع نص. اذا كان صندوق الاختيار مُختارا "تشغيل" فهذا يُعرض بعلامة صح بالصندوق.
في مثالنا سوف نعرض صندوق اختيار في النافذة. اذا كان صندوق الاختيار مُختارا يتم عرض عنوان النافذة، واذا لم يكن مختارا يتم اخفائه.
"checkbox.h"
#ifndef CHECKBOX_H #define CHECKBOX_H #include <QWidget> { Q_OBJECT public: private slots: void showTitle(int); }; #endif
|
هذا هو الهيدر لمثالنا
"checkbox.cpp"
#include "checkbox.h" #include <QCheckBox> CheckBox ::CheckBox(QWidget *parent ){ cb->setCheckState(Qt::Checked); cb->move(50, 50); connect(cb, SIGNAL(stateChanged(int)), this, SLOT(showTitle(int))); } void CheckBox::showTitle(int state) { if (state == Qt::Checked) { setWindowTitle("QCheckBox"); } else { setWindowTitle(""); } }
|
لقد عرضنا صندوق اختيار في النافذة ونربطه بالـ showTitle
cb->setCheckState(Qt::Checked);
|
صندوق الاختيار مُختارا عندما يبدأ البرنامج.
void CheckBox::showTitle(int state)
{
if (state == Qt::Checked) {
setWindowTitle("QCheckBox");
} else {
setWindowTitle("");
}
}
|
هذه تقوم بضبط عنوان النافذه وفق حاله صندوق الاختيار.
"main.cpp"
#include "checkbox.h" #include <QDesktopWidget> #include <QApplication> { 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[]) { CheckBox window; window.setWindowTitle("QCheckBox"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

QListWidget
كائن القائمة QListWidget هو كائن يستخدم لعرض قائمة من المكونات.
في مثالنا سوف نوضع كيف نضيف ، نعيد تسمية أو نحذف المكونات في القائمة.
"listwidget.h"
#ifndef LISTWIDGET_H #define LISTWIDGET_H #include <QWidget> #include <QPushButton> #include <QListWidget> { Q_OBJECT public: private slots: void addItem(); void renameItem(); void removeItem(); void clearItems(); private: }; #endif
|
ملف الهيدر لمثالنا.
"listwidget.cpp"
listwidget.cpp #include "listwidget.h" #include <QVBoxLayout> #include <QInputDialog> ListWidget ::ListWidget(QWidget *parent ){ vbox->setSpacing(10); // must add it to another layout. lw->addItem("The Omen"); lw->addItem("The Exorcist"); lw->addItem("Notes on a scandal"); lw->addItem("Fargo"); lw->addItem("Capote"); vbox->setSpacing(3); vbox->addStretch(1); vbox->addWidget(add); vbox->addWidget(rename); vbox->addWidget(remove); vbox->addWidget(removeAll); vbox->addStretch(1); hbox->addWidget(lw); hbox->addSpacing(15); hbox->addLayout(vbox); connect(add, SIGNAL(clicked()), this, SLOT(addItem())); connect(rename, SIGNAL(clicked()), this, SLOT(renameItem())); connect(remove, SIGNAL(clicked()), this, SLOT(removeItem())); connect(removeAll, SIGNAL(clicked()), this, SLOT(clearItems())); setLayout(hbox); } void ListWidget::addItem() { "Enter new item"); item = item.simplified(); if (!item.isEmpty()) { lw->addItem(item); int r = lw->count() - 1; lw->setCurrentRow(r); } } void ListWidget::renameItem() { int r = lw->row(curitem); item = item.simplified(); if (!item.isEmpty()) { lw->takeItem(r); delete curitem; lw->insertItem(r, item); lw->setCurrentRow(r); } } void ListWidget::removeItem() { if (item) { int r = lw->row(item); lw->takeItem(r); delete item; } } void ListWidget::clearItems() { if (lw->count() != 0) lw->clear(); }
|
في مثالنا نعرض قائمة وأربعة أزرار. سوف نستخدم هذه الأزرار لاضافة و اعادة تسمية و حذف المكونات من القائمة.
lw = new QListWidget(this);
lw->addItem("The Omen");
lw->addItem("The Exorcist");
lw->addItem("Notes on a scandal");
lw->addItem("Fargo");
lw->addItem("Capote);
|
تم انشاء قائمة و ملأهما بخمس مكونات.
void ListWidget::addItem()
{
QString item = QInputDialog::getText(this, "Item",
"Enter new item");
item = item.simplified();
if (!item.isEmpty()) {
lw->addItem(item);
int r = lw->count() - 1;
lw->setCurrentRow(r);
}
}
|
هذه تقوم باضافة مكون جديد للقائمة، حيث تعرض نافذة حوار والتي بدورها تقوم بارجاع النص المُدخل. ولقد ازلنا المسافات الفارغة المحتملة بالنص عن طريق simplified() . اذا كان النص المأخوذ من نافذة الحوار ليس فارغا يتم اضافته للقائمة. اخيرا نقوم بتظليل المكون الذي تم اضافته.
void ListWidget::removeItem()
{
QListWidgetItem *item = lw->currentItem();
if (item) {
int r = lw->row(item);
lw->takeItem(r);
delete item;
}
}
|
وهذه تقوم بحذف مكون معين من القائمة. أولا نأخذ المكون من القائمة QListWidgetItem المُختار حاليا . نحدد الصف الحالي ونحذف المكون باستخدام طريقة الـ takeItem(). لاحظ كيف اننا مسحنا الـ QListWidgetItem .
"main.cpp"
main.cpp #include "listwidget.h" #include <QDesktopWidget> #include <QApplication> { 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[]) { ListWidget window; window.setWindowTitle("QListWidget"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة

QPixmap
QPixmap هو من الكائنات التي تسخدم للتعامل مع الصور، فهي تعرض الصور على الشاشة.
في مثالنا سوف نستخدم QPixmap لعرض صورة في النافذة.
"pixmap.h"
#ifndef PIXMAP_H #define PIXMAP_H #include <QWidget> { public: }; #endif
|
ملف الهيدر
"pixmap.cpp"
#include "pixmap.h" #include <QPixmap> #include <QLabel> #include <QHBoxLayout> { label->setPixmap(pixmap); hbox->addWidget(label); setLayout(hbox); }
|
هنا نعرض صورة لقلعة مشهورة موجودة في وسط سلوفاكيا
QPixmap pixmap("bojnice.jpg");
QLabel *label = new QLabel(this);
label->setPixmap(pixmap);
|
أنشأنا QPixmap ووضعناها داخل بطاقة label.
"main.h"
#include "pixmap.h" #include <QDesktopWidget> #include <QApplication> { 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[]) { Pixmap window; window.setWindowTitle("QPixmap"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

QSplitter
المقسم QSplitter هو كائن يسمح بالتحكم في حجم الكائنات الموجودة في النافذة عن طريق سحب الحدود بينها.
في مثالنا سوف نعرض ثلاث اطارات QFrame تم ترتيبها باسخدام مقسمين.
"splitter.h"
#ifndef SPLITTER_H #define SPLITTER_H #include <QWidget> { public: }; #endif
|
ملف الهيدر.
"splitter.cpp"
#include "splitter.h" #include <QFrame> #include <QSplitter> #include <QHBoxLayout> Splitter ::Splitter(QWidget *parent ){ topleft ->setFrameShape(QFrame::StyledPanel); topright ->setFrameShape(QFrame::StyledPanel); splitter1->addWidget(topleft); splitter1->addWidget(topright); bottom ->setFrameShape(QFrame::StyledPanel); splitter2->addWidget(splitter1); splitter2->addWidget(bottom); hbox->addWidget(splitter2); setLayout(hbox); }
|
هنا لدينا ثلاث اطارات و مقسمين.
QSplitter *splitter1 = new QSplitter(Qt::Horizontal, this);
splitter1->addWidget(topleft);
splitter1->addWidget(topright);
|
ننشئ مقسم ونضيف إليه اطارين.
QSplitter *splitter2 = new QSplitter(Qt::Vertical, this);
splitter2->addWidget(splitter1);
|
يمكننا أيضا اضافة مقسم لمقسم آخر.
"main.cpp"
#include "splitter.h" #include <QDesktopWidget> #include <QApplication> { int x, y; int screenWidth; int screenHeight; int WIDTH = 350; int HEIGHT = 300; 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[]) { Splitter window; window.setWindowTitle("QSplitter"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

QTableWidget
كائن الجدول QTableWidget هو كائن مميز يُستخدم في برامج الجدولة. يسمى كائن الشبكة أحيانا. هو واحد من أكثر الكائنات تعقيدا. هنا سوف نقوم فقط بعرض الجدول في النافذة.
"table.h"
#ifndef TABLE_H #define TABLE_H #include <QWidget> { public: }; #endif
|
ملف الهيدر
"table.cpp"
#include "table.h" #include <QHBoxLayout> #include <QTableWidget> { hbox->addWidget(table); setLayout(hbox); }
|
QTableWidget *table = new QTableWidget(25, 25, this);
|
هنا أنشأنا جدول بـ 25 صفا و 25 عمودا
"main.cpp"
#include "table.h" #include <QDesktopWidget> #include <QApplication> { 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[]) { Table window; window.setWindowTitle("QTableWidget"); window.show(); center(window); return app.exec(); }
|
ملف الـ main
والنتيجة:

| إسم الكاتب |
تاريخ الإضافة |
التقييم / المقيمين |
زيارات الدرس |
| Shanx |
21/01/2009 |
0 / 0 |
746 |
|
|
|
|