در فصل اول از سری آموزشهای C++ و Qt به معرفی چند دستور ساده و رشتهها و مسائل ابتدایی پرداختم اما از این فصل یعنی فصل دوم قصد دارم تا به معرفی برخی گزینهها کمی پیشرفتهتر در Qt بپردازم که باعث میشود برنامههای بهتری در Qt بنویسیم. پیشفرض این آموزش آن است که شما میدانید کلاس چیست و باکلاسها در C++ آشنا هستید همچنین مفاهیمی مانند ماکرو یا تابع سازنده و مخرب و … را بهخوبی بلدید! اگر تمامی موارد بالا را بلد هستید، این آموزش برای شما مناسب خواهد بود. برنامه نویسان Java هم به راحتی میتوانند با آموزش همراه شوند.
در Qt بهجای Event در C# و Delphi و VB از Signal و Slot استفاده میشود به این شکل که شما میگویید، رویداد OnClick فلان دکمه با اسم btnOK را به فلان تابع وصل کن. تا زمانی که روی دکمهی btnOK کلیک شد دستورات تابع مثلاً MybtnOKonclick اجرا شود! یا مثلاً اگر روی دکمهی quit کلید شد برنامه خارج شود و تابع quit() اجرا شود!
1
|
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
|
برنامهی کامل اینکه یک پنجره ساخته شود و در آن دکمهی quit قرار گیرد و سپس به متد Quit متصل شود بهصورت زیر خواهد بود: (شما به جای “” از علامتهای کوچکتر و بزرگتر استفاده کنید.)
#include "QApplication" #include "QWidget" #include "QPushButton" class MyButton : public QWidget { public: MyButton(QWidget *parent = 0); }; MyButton::MyButton(QWidget *parent) : QWidget(parent) { QPushButton *quit = new QPushButton("Quit", this); quit->setGeometry(50, 40, 75, 30); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyButton window; window.resize(250, 150); window.move(300, 300); window.setWindowTitle("button"); window.show(); return app.exec(); }
همانطور که قابلمشاهده است یک دکمه Button ساختهایم. یعنی یک instance از کلاس QButton ایجاد کردهایم که quit نام دارد. که در پرانتز به آن متن و this را که به مهنای والد شیء است را دادهایم. سپس مکان آن را مشخص کرده و آن را به quite() وصل کردهایم. ظاهر برنامهی بالا به شکل بالا خواهد بود:
نکته: والد شیء Parent یک Object است و باید یک Qwidget باشد در هنگامیکه والد بسته شود، این Widget هم از حافظه خارج میشود.
بعد از اجرا اگر روی دکمهی Quit کلیک کنید پنجره به بسته خواهد شد. بهجای QWidget میتوان از QDialog هم استفاده کنید.