تبلیغات
Qt Developer Blog - QMainWindow قسمت دوم
 
Qt Developer Blog
کیوتی ساده و آسان برای همه
                                                        
درباره وبلاگ

در این وبلاگ کیوتی که مجموعه ای از کلاس ها برای برنامه نویسی دلپذیر تر با سی پلاس پلاس هست آموزش داده میشود
مدیر وبلاگ : سعید دادخواه
نظرسنجی
آموزش ها به چه صورتی باشد






آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :
پنجشنبه 30 دی 1389 :: نویسنده : سعید دادخواه
ارث بری از کلاس QMainWindow
سلام خدمت دوستان عزیز
در قسمت قبلی با کلاس QMainWindow به طور مختصر آشنا شدیم . خوب ذکر این نکته مهمه که معمولا برنامه های بزرگ تر به شیوه ای که در مثال قبلی دیدیم نوشته نمیشند. بلکه در برنامه های جدی تر و مهم تر ما از کلاس QMainWindow ارث میبریم و ویژگی های مورد نیازمون رو بهش اضافه میکنیم
یه مثال خیلی ساده رو با هم بررسی میکنیم . فرض کنید میخوایم یه کلاس به نام MainWindow (‌ کیو نداره) درست کنیم که از کلاس QMainWindow ارث برده شده باشه . خوب اول ساده ترین قسمت کد رو با هم ببینیم 
کد:
#include <QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow mainWindow; mainWindow.show(); return a.exec(); }
خوب کد بالا فقط برای ساختن یه شی از کلاس ماست . که خیلی شبیه مثال قبلیه با این تفاوت که هر چیزی که قراره در داخل MainWindow ماقرار بگیره باید به فایل MainWindow.cpp و سازنده اون منتقل بشه و در main ما تنها یه شی از اون میسازیم و با تابع show() نمایشش میدیم.

فایل MainWindow.h ما به شکل زیر خواهد بود

کد:
#include <QMainWindow> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); };
خوب همون طور که از کد پیداست ما از کلاس QMainWindow ارث بردیم. Q_OBJECT رو هم که توی moc گفتیم . اگه کلاس شما حاوی سیگنال و اسلاتی باشه که خودتون تعریف میکنید این ماکرو حتما باید ذکر بشه. اما عادت خوبیه حتی اگه شما سیگنال و اسلات خودتون رو هم تعریف نکردید ولی این ماکرو رو توی فایل .h تون قرار بدین.( شاید تجربه کرده باشید که چرا میگم خوب عادتیه )

کد:
#include "mainwindow.h" #include <QLabel> MainWindow::MainWindow() { setWindowTitle(tr("MyFirstMainWindow")); resize(400, 400); QLabel* label = new QLabel(tr("Central Widget")); setCentralWidget(label); label->setAlignment(Qt::AlignCenter); }
فرض کنید سازنده ی این کلاس هم به صورت بالا باشه .
تابع اول چیه ؟ window title عنوان بالای پنجره شما رو تعیین میکنه مثلا اگه از مرور گر firefox استفاده میکنید window title شما یه چیزی شبیه Mozila FireFox هستش که در کنار دکمه های بستن و ... هستش. برای تعیین window title یه main window از این تابع استفاده میکنیم . این تابع عضو کلاس QMainWindow هستش و چون شما به صورت public از این کلاس ارث بردین مسلما بهش دسترسی دارین.
چیزی که توی این تابع به چشم میخوره استفاده از یه تابع دیگه به نام tr هستش . این تابع خیلی کاربردیه . چرا ؟ با عادت به این کار که هر رشته ای که تو برنامه تون هست رو داخل این تابع قرار بدین ، به صورت ضمنی دارین رشته هاتونو برای ترجمه به زبان های دیگه تعیین میکنید. یعنی چی ؟ خوب اگه شما بخواید برنامه ای که نوشتید رو به زبان های مختلف توسعش بدین کار ساده ای نخواهد بود چون یک به یک باید اونا رو جایگزین کنید یا مثل بعضی از برنامه ها از فایل های خارجی استفاده کنید . اما در کیوتی با تعیین رشته هایی که باید ترجمه شوند و استفاده از برنامه linguist که بعدا آموزشش رو باهم میبینیم میتونید به راحتی برنامه تون رو به هر زبانی تر جمه کنید 
تابع بعدی که استفاده شده resize هستش که برای تغییر عرض و ارتفاع یه ویندو هستش . به ترتیب عرض و ارتفاع رو به عنوان پارامتر به این تابع ارسال میکنیم . بعد از انجام این دستور ، پنجره ما عرض 400 و ارتفاع ۴۰۰ خواهد داشت.
تو خط بعدی کد من اومدم یه QLineEdit رو روی heap گرفتم تا به main window خودم اضافه کنم . چرا با new این کارو انجام دادم ؟‌چون که اگه روی استک میگرفتم خوب بعد از اینکه سازنده تموم میشد به طبع QLineEdit ساخته شده هم از بین میرفت. 
تابع setCentralWidget هم که قبلا توضیحشو دادیم .فقط یه نکته یادم رفت بگم اینکه با اجرای این تابع ، main window پدر ویدجتی میشه که به عنوان پارامتر به این تابع ارسال شده یعنی اونو مدیریت میکنه و در 
زمان مقتضی پاکش میکنه.
برای اینکه متن لاین ادیت هم در وسط نمایش داده بشه از تابع setAlignment استفاده کردیم . 
نکته آخر این که اگه شما بخواین ویدجت مرکزی تون یه کم پیچیده تر و در عین حال مرتب باشه میتونید این کارو بکنید که ابتدا یه شی از QWidget بسازید بعدش روی این ویدجت هر چی دلتون خواست ویدجت های دیگه مثل QLineEdit , QPushButton و.. با استفاده از layout ها بچینید و بعد اون ویدجت رو به عنوان ویدجت 
مرکزی انتخاب کنید
فعلا




نوع مطلب :
برچسب ها : Qt، QT، qt، کیوت، آموزش کیوت، QMainWindow، mainwindow،