کیوتی ساده و آسان برای همه

QMainWindow قسمت هشتم

نویسنده :سعید دادخواه
تاریخ:چهارشنبه 6 بهمن 1389-08:29 ق.ظ

QMainWindow قسمت هشتم
نوار وضعیت Status bar

بنام خدا
خوب در جلسه قبلی در مورد کار با فایل ها در کیوتی و همچنین کار با دیالوگ های استاندارد صحبت کردیم . این قسمت هم سعی داریم که اول اسلات save رو با هم بررسی کنیم و بعدش کار با status bar یا نوار وضعیت رو با هم بررسی کنیم.
کد:
void QNotePad::saveDocument() { QString fileName = QFileDialog::getSaveFileName(this, "Open", "", "Text Files (*.txt);;All Files(*.*)" ); QFile file(fileName ); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, tr("Application"), tr("Cannot write file %1:\n%2.") .arg(fileName) .arg(file.errorString())); return; } QTextStream out(&file); out << m_plainTextEdit->toPlainText(); }
همون طور که مشاهده میکنید گرفتن یه آدرس برای ذخیره یه فایل مثل بازکردنه . با تابع getSaveFileName که عضو کلاس QFileDialog هستش و در ضمن استاتیک هست این کار قابل انجام هست. بقیه کد هم که خیلی ساده هست هم تکراری است و هم چیزی برای گفتن نداره . در مورد toPlainText فقط توضیح بدم که چون textEdit ها میتونن متن با فرمت داشته باشند (Rich Text) به همین دلیل ممکنه متنشون ساده ساده هم نباشه . با استفاده از این تابع من در واقع دارم متن ساده رو بدست میارم یعنی متنی که هیچ فرمتی نداره . 
برای مشاهده status bar به ادامه مطلب برین


ادامه مطلب


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت هفتم

نویسنده :سعید دادخواه
تاریخ:دوشنبه 4 بهمن 1389-09:16 ق.ظ

QMainWindow قسمت هفتم
کار با دیالوگ های استاندارد و فایل ها

سلام دوستان امید وارم که صبح خوبی رو شروع کرده باشید .

در این قسمت قصد داریم اسلات های save و open رو درست کنیم. خوب در این صورت به یک سری کلاس هایی بر میخوریم که در کیوتی با نام Standard Dialogs شناخته میشند . دیالوگ های استاندارد مجوعه ای از کلاس ها هستند که ما رو برای انجام برخی از کارهای استاندارد یاری میکنند . مثلا اگه شما نیاز به گرفتن یه فونت دارین برای یه جای برنامه تون کیوتی کلاسی داره که شما رو برای انتخاب یه فونت راحت میکنه . یا اگه تو برنامه تون نیاز دارین که انتخاب یه رنگ به کاربر سپرده بشه . خوب بهترین کار ممکن اینه که یه پالت رنگ به کاربر نمایش بدین و بعدش بخواین که رنگو انتخاب کنه . باز هم دیالوگی برای این کار هست. اما دیالوگ استانداردی که ما در این قسمت نیاز داری دیالوگ گرفتن یه آدرس برای باز کردن متنیش در برنامه است . همچنین نیاز به دیالوگی داریم که یه آدرس به ما برای ذخیره فایلمون بده. در ضمن در این قسمت نیاز به کار با فایل ها بدر کیوتی داریم . برای کاربا فایل ها در کیوتی کلاس هایی تعبیه شده که اساس همگی اونا کلاسی است به نام QIODevice .

خوب اسلات openDocument تا اینجا به صورت زیر خواهد بود

کد:
void QNotePad::openDocument()
{
    QString fileName =
            QFileDialog::getOpenFileName(this, "Open", "", "Text Files (*.txt);;All Files(*.*)" );
    if( !QFile::exists(fileName))
        return;

    QFile file(fileName );

    if (!file.open(QFile::ReadOnly | QFile::Text)) {
             QMessageBox::warning(this, tr("Application"),
                                  tr("Cannot read file %1:\n%2.")
                                  .arg(fileName)
                                  .arg(file.errorString()));
             return;
         }
    QTextStream in(&file);
    m_plainTextEdit->setPlainText(in.readAll());

}
ادام مطلب رو از دست ندین
ادامه مطلب


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت ششم

نویسنده :سعید دادخواه
تاریخ:یکشنبه 3 بهمن 1389-09:12 ق.ظ

سلام .خوب دوستان امید وارم که تا حالا خسته نشده باشید و اماده مطالب جدید تری از کیوتی باشید
در جلسات قبل یکی از مهمترین موجودیت های یه برنامه با واسط کاربر گرافیکی رو با هم دیدیم . یعنی طراحی منو . در این قسمت قصد داریم یکی دیگه از بخش های لازم و مورد نیاز یه برنامه گرافیکی رو با هم ببینیم .تولبار. در این جلسه همچنین قصد داریم که به action هایی که در جلسات قبلی ایجاد کردیم جان بدهیم .یعنی اینکه کار دلخواه ما رو انجام بدن.

خوب بهتره کد های این جلسه رو ببینید. اول فایل QNotePad.h . بعضی از قسمت ها حذف شدند.

کد:
#ifndef QNOTEPAD_H #define QNOTEPAD_H #include <QMainWindow> class QPlainTextEdit; class QAction; class QNotePad : public QMainWindow { Q_OBJECT; public: QNotePad(); private: . . . void createMenus(); void createToolbars(); void createConnections(); private slots: void newDocument(); void openDocument(); void saveDocument(); };
در فایل QNotePad.cpp بخش های مهم به صورت زیر هستند.
کد:
void QNotePad::createToolbars() { QToolBar *mainToolbar = new QToolBar( this ); mainToolbar->addAction( m_newFileAction ); mainToolbar->addAction( m_openFileAction ); mainToolbar->addAction( m_saveFileAction ); mainToolbar->addAction( m_exitAction ); addToolBar( mainToolbar ); }
خوب برای ساختن یه تولبار باز هم از کلاسی که در کیوتی به این منظور ایجاد شده استفاده میکنیم . و اون کلاس QToolBar هستش که یه شی ازش میسازیم و تنها کار مورد نیاز اضافه کردن اکشن هایی است که قبلا اونارو توی ساختن منو ها ساختیم . با تابع addAction اونارو به تولبار مون اضافه میکنیم . با تابع addToolBar عضو کلاس QMainWindow هم میتونیم یک تولبار رو به main window خودمون اضافه کنیم . 

برای اینکه بتونیم از صدا زده شدن یه اکشن با خبر بشیم سیگنال triggered عضو کلاس QAction باید استفاده بشه . این سیگنال زمانی emit میشه که اکشن ما به یه نحوی صدا زده شده باشه یا با استفاده از منو ها یا با استفاده از تولبار یا ... . پس تابع createConnections ما به صورت زیر در میاد.

کد:
void QNotePad::createConnections() { connect( m_newFileAction, SIGNAL(triggered()), SLOT(newDocument())); connect( m_openFileAction, SIGNAL(triggered()), SLOT(openDocument())); connect( m_saveFileAction, SIGNAL(triggered()), SLOT(saveDocument())); connect( m_exitAction, SIGNAL(triggered()), this, SLOT(close()) ); }
نکته ای که هست در تابع connect اگه گیرنده اسلات کلاس جاری باشه this نیازی به ذکر اون نیست. با تعریف هر یک از این اسلات ها کار دلخواه ما انجام خواهد شد. خوب اینم یه تعریف ساده از اسلات newDocument 

کد:
void QNotePad::newDocument() { m_plainTextEdit->setPlainText(""); }
خوب اسلات های دیگه بیشتر بحث داره که بعدا با هم بحث میکنی


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت پنجم

نویسنده :سعید دادخواه
تاریخ:شنبه 2 بهمن 1389-09:17 ق.ظ

با سلام خدمت دوستان عزیز
در قسمت قبلی تونستیم که منو رو به mainwindow اضافه کنیم . حالا قصد داریم به اکشن های داخل منو ها آیکن اضافه کنیم و بعد اونا رو به یه toolbar هم اضافه کنیم.
برای استفاده از منابع (Resources) در برنامه دو راه داریم یا آنها را در پوشه هایی کنار برنامه بذاریم یا اینکه از سیستم منابع کیوتی (Qt Resources system ) استفاده کنیم . گزینه اول مشکلاتی داره از جمله اینکه فایل های شما در دسترس کاربر هست و یا ممکنه از بین بره . اما همون طور که توی بخش کامپایلر منابع کیوتی گفته شد . شما میتونید این فایل ها رو در درون فایل اجرایی تعبیه کنید (Embedded) .در این صورت شما به فایل هاتون دسترسی دارین و دیگران نه !
خوب برای اینکه بتونین از سیستم منابع کیوتی استفاده کنید باید یه فایل دیگه به پروژه تون اضافه کنید با پسوند qrc که با استفاده از گزینه 
File->New File or projects->Qt ->Qt Resource File
قابل اضافه شدن به پروژه هست. خوب با اضافه شدن این فایل به پروژه و کلیک کردن روش صحفه برای شما باز میشه که کار اضافه کردن منبع رو به پروژه راحت میکنه. در مورد منابع با دو تا اسم و مفهوم جدید روبرو هستیم . یکی prefix ودیگری alias . در مورد اولی باید بگم که prefix در واقع ابزاری برای پوشه بندی مجازی در یک فایل res هستش . با این کار و با اضافه کردن prefix شما میتونید تصاویر تون رو به دسته های مختلف طبقه بندی کنید.


البته میتونید یه prefix بینام هم داشته باشید . خوب با کلیک بر روی گزینه Add files شما میتونید هر نوع فایلی رو به عنوان منبع به برنامه تون اضافه کنید . من چندتا آینکن به برنامه ام اضافه کردم. بهتره منابع تون رو توی یه پوشه به نام Resources در کنار فایل های سرس برنامه تون اضافه کنید . در ضمن در مسیر نصب کیوتی و در پوشه Examples شما میتونید آیکن های متدوال و مورد نیاز رو پیدا کنید.

خوب تا اینجا من و البته امید وارم شما به پروژه ام چندتا منبع اضافه کردم . وقت استفاده از اوناست

کد:
void QNotePad::createMenus()
{
    QMenu *fileMenu = menuBar()->addMenu("File");
    m_newFileAction = fileMenu->addAction("New");
    m_newFileAction->setIcon(QIcon(":/menu_icons/Resources/filenew.png"));
    m_newFileAction->setShortcut( QKeySequence::New );

    m_openFileAction = fileMenu->addAction("Open");
    m_openFileAction->setIcon(QIcon(":/menu_icons/Resources/fileopen.png"));
    m_openFileAction->setShortcut(QKeySequence::Open);

    m_saveFileAction = fileMenu->addAction("Save");
    m_saveFileAction->setIcon(QIcon(":/menu_icons/Resources/filesave.png"));
    m_saveFileAction->setShortcut(QKeySequence::Save);

    m_exitAction = fileMenu->addAction("Exit");
    m_exitAction->setIcon(QIcon(":/menu_icons/Resources/delete.png"));
    m_exitAction->setShortcut(QKeySequence("Ctrl+Q"));
}

خوب این تابعی که قبلا نوشتیم رو یه کم تغییر دادیم تا نتایج دلخواه حاصل بشه . اولین تغییر مربوط به استفاده از تابع setIcon مربوط به کلاس QAction هستش . که به اکشن ما یه ایکن نسبت میده . این تابع نیاز به یه شی از کلاس QIcon داره که خوب گرفته دیگه .
نحوه آدرس دهی یه منبع :یک دونقطه + prefix اون منبع + آدرس بعد از prefix .
به تصویر ضمیمه شده نگاه کنید و با نحوه آدرس دهی بالا انطباق بدین تا متوجه بشین.

برای کلید میانبر دادن به یک اکشن از تابع setShortcut استفاده میکنیم. این تابع یک شی از کلاس QKeySequence از ما انتظار داره . از طرفی کیوتی برای اینکه شما به راحتی بتونید به استاندارد کلید میانبر دهی کنید برای کلید های پر کاربرد enum در نظر گرفته که شما رو از دادن کلید به صورت صریح راحت میکنه . اما خوب امکانش هست که به صورت صریح این کارو انجام بدین که در آخرین setShortcut قابل مشاهده هست. ذکر این نکته مهمه که در آخرین setShortcut ما از یک شی از QKeySequence استفاده کردیم. این شی چند سازنده داره که یکیش از ما یه QString میگیره که کلید ترکیبی (‌یا غیر ترکیبی ) میانبر ماست.


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت چهارم

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 30 دی 1389-01:21 ب.ظ

خوب تا این جا رفتیم که برای افزودن منو و تولبار به main window با مفهومی به نام action روبرو هستیم . جلسه قبلی با مفهومش آشنا شدیم حالا بریم سراغ کاربردش.

ایجا منو در یک QMainWindow
برای ایجاد منو بار در کیوتی چندین کلاس درگیر خواهندشد . QMenuBar , QMenu, QAction . هر QMainWindow یی یه QMenuBar فعال داره که این QMenuBar شامل چندین QMenu میشه و هر QMenu شامل چندین QAction . پس QMenuBar حاوی تمامی منوهای یک اپلیکیشن خواهد بود و هر QMenu حاوی چندین Action . 
به صورت پیش فرض هر QMainWindow حاوی یه QMenuBar هستش که از طریق تابع menuBar() شما میتونید به اشاره گری از اون دسترسی پیدا کنید . وقتی که شما به یه QMenuBar دسترسی دارین با استفاده از تابع addMenu عضو کلاس QMenuBar میتونید به این منوبار یه منو اضافه کنید . فرض کنید فایل QNotePad.cpp ما به صورت زیر باشه

کد:
QNotePad::QNotePad() { .... createMenus(); } void QNotePad::createMenus() { QMenu *fileMenu = menuBar()->addMenu("File"); m_newFileAction = fileMenu->addAction("New"); m_openFileAction = fileMenu->addAction("Open"); m_saveFileAction = fileMenu->addAction("Save"); m_exitAction = fileMenu->addAction("Exit"); }
و فایل QNotePad.h به صورت زیر

کد:
#include <QMainWindow> class QPlainTextEdit; class QAction; class QNotePad : public QMainWindow { public: QNotePad(); private: QPlainTextEdit *m_plainTextEdit; QAction *m_newFileAction; QAction *m_openFileAction; QAction *m_saveFileAction; QAction *m_exitAction; void createMenus(); }; #endif // QNOTEPAD_H
بخش های غیر ضروری حذف شدند . راه های مختلفی برای انجام این کاری که من انجام دادم هست که در آخر نتیجه یکی خواهد بود. خوب توی فایل .h من چهار تا اشاره گر به QAction ساختم . این اکشن ها همون طور که گفتم وظیفه انجام کاری رو دارند که ممکنه از چندین راه ، درخواستی برای انجام وظیفه شون براشون صادر بشه. مثلا اولی برای ایجاد یه سند خالی هستش که ممکنه از طریق های زیر صدا زده بشه
۱.ازطریق منوی فایل
۲.ازطریق Ctrl+N
۳.ازطریق تولبار
چون قصد داریم این اکشن ها بعدا در تابعی که ذکر خواهدشد به تولبار هم اضافه بشند اونارو به صورت عضو کلاس تعریف 
کردیم . و حالا تابع createMenus که تابع عضو کلاس QNotePad هست که من خودم برای ساختن منو ها استفاده کردم.

کد:
void QNotePad::createMenus() { QMenu *fileMenu = menuBar()->addMenu("File"); m_newFileAction = fileMenu->addAction("New"); m_openFileAction = fileMenu->addAction("Open"); m_saveFileAction = fileMenu->addAction("Save"); m_exitAction = fileMenu->addAction("Exit"); }
خوب همونطور که گفتم تابع menuBar عضو کلاس QMainWindow اشاره گری به منوبار جاری برمیگردونه . و با استفاده از تابع addMenu عضو کلاس QMenuBar ما یه منو به منوبارمون اضافه میکنیم. پارامتر ارسالی به تابع نام منو رو تعیین میکنه . پارامتر های دیگه ای هم میشه ارسال کرد که فعلا مورد بحث ما نیست.این تابع اشاره گری به منوی ایجاد شده بر میگردونه که ما اونو توی fileMenu نگهش میداریم . 
حال با استفاده از تابع addAction عضو کلاس QMenu به منوی فایل مون اکشن های دلخواهمون رو اضافه میکنیم. باز هم همون شیوه افزودن منو اینجا تکرار شده . یعنی با استفاده از تابع addAction ما به منوی فایلمون یه اکشن اضافه میکنیمو اشاره گرش رو نگه میداریم ( بعدا از این اشاره گر استفاده خواهیم کرد ) . حالا کافیه که با ctrl+r پروژه تون رو ( اگه تو creator هستید در غیر این صورت با توجه به ide ) اجرا کنید تا نتیجه رو ببینید . البته فراموش نکنید که فایل QNotePad.pro شما حاوی خط زیر باشه .

کد:
QT+= gui core
این خط کتابخانه اصلی کیوتی و کتابخانه gui رو به پروژه تون اضافه میکنه . اینکه ساختار و کاربرد فایل .pro چیه بعدا بیشتر باهم بحث میکنیم .

سعی کنید خودتون منو ها و اکشن های دیگه ای به منوبار اضافه کنید.
شاید سوالات زیادی براتون پیش اومده که مثلا چه طوری یه short key به اکشن نسبت بدم یا چطوری یه اکشن آیکن داشته باشه که همه این ها در آینده بحث خواهد شد ان شا الله


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت سوم

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 30 دی 1389-02:20 ق.ظ

سلام خدمت دوستان عزیز
خوب با مقدمات QMainWindow آشنا شدیم . برای اینکه main window ما دارای منوبار ، تولبار و ... باشه دو راه داریم . یکی استفاده از Qt Designer هستش و دیگری کد نویسی و خوب به طبع کسی که دومی رو بدونه دیگه اولی براش کاری نداره . ما در ادامه قصد داریم با هم ، مرحله به مرحله ، یه ویرایشگر متن خیلی ساده بنویسیم تا از این طریق با قسمت های مختلف یه main window آشنا بشیم .
خوب من یه empty project ساختم (File - > New File Or Project -> Other Project -> Qt empty projet ) به نام QNotePad و بعدش یه فایل main.cpp و یه کلاس QNotePad که از QMainWindow ارث برده بهش اضافه 
کردم.
کد QNotePad.h به صورت زیر خواهد بود

کد:
#ifndef QNOTEPAD_H #define QNOTEPAD_H #include <QMainWindow> class QPlainTextEdit; class QNotePad : public QMainWindow { public: QNotePad(); private: QPlainTextEdit *m_plainTextEdit; }; #endif // QNOTEPAD_H
برای کار با متن های یه خطی از QLineEdit استفاده میکنیم . ولی اگه متن چند خطی شد باید از QTextEdit استفاده بشه . نکته ای که هست اینه که QTextEdit توانایی پذیرش متن های فرمت شده رو داره . یعنی چی یعنی متنی که یه جاش blod شده یا مثلا متنی که رنگ یه جاش با بقیه فرق میکنه . و حتی جالبتر این که شما میتونید یه متنی که با html فرمت شده رو به QTextEdit بدین . اما چون ما میخوایم خیلی ساده کار کنیم از QPlainTextEdit استفاده کردیم که فقط متن های ساده قبول میکنه.

فایل QNotePad.cpp من هم به صورت زیر خواهد بود.
کد:
#include "QNotePad.h" #include <QPlainTextEdit> QNotePad::QNotePad() { setWindowTitle(tr("QNotePad")); m_plainTextEdit = new QPlainTextEdit; setCentralWidget(m_plainTextEdit); }
که مثل مثال قبلیه . فقط من QPlainTextEdit رو به صورت اشاره گری عضو کلاس تعریف کردم تا اگه جای دیگه ای در کلاس بهش نیاز داشتم مشکلی نداشته باشم.( البته از تابع centralWidget هم میشد استفاده کرد!)
خوب تا اینجا که مثل قبل بود ولی خوب ما قصد داریم به این برنامه چندین منو و تولبار و status bar اضافه کنیم که به مرور با هم این کارو انجام میدیم.
فقط من یه پیش زمینه ای بگم و کار رو از جلسه بعدی آغاز میکنیم.
در برنامه نویسی و ایجاد یه main window یه چیزی زیاد به گوش میخوره ( منظورم در کیوتی هستش ) که QAction نام داره . QAction چیه ؟ یه مثال شما وقتی میخواید تلویزیون رو روشن کنید دو تا راه دارید یا از remote control استفاده کنید یا به صورت مستقیم با دکمه ای که روی خود تلویزیون هست. هر دوی اینا یه کارو انجام میدن اونم تلویزیون رو روشن میکنند . حالا در مورد خاموش کردن هم همین طور با این تفاوت که یه راه دیگه هم هست که دوشاخو رو از پریز در بیاریم  یا فیوز رو قطع کنیم  . باز هم همه اینها یه کار رو انجام میدند ، تلویزیون رو خاموش میکنند . توی کیوتی نگاه کنید حالا :‌من میخوام یه فایل متنی رو درون این ویرایش گرم باز کنم چند تا راه دارم : یکی اینکه از منوی فایل گزینه open رو بزنم ، یا اگه توی تولبار ایکنش هست ،‌ایکنش رو بزنم ،‌یا از ctrl+o استفاده کنم . باز هم همه اینها یک کار میکنه . به این یک کار توی کیوتی میگند Action . شما یه Action تعریف میکنید ( مثلا اکشن باز کردن یه فایل )‌و بعد جاهای مختلف ازش استفاده میکنید مثلا توی منو یا تولبار .پس اساس تعریف منو و تولبار در کیوتی QAction هست که بعدا باهاش بیشتر اشنا میشیم.

نوع مطلب : ویدجت های Qt  عمومی 

داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت دوم

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 30 دی 1389-01:28 ق.ظ

ارث بری از کلاس 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 ها بچینید و بعد اون ویدجت رو به عنوان ویدجت 
مرکزی انتخاب کنید
فعلا


داغ کن - کلوب دات کام
نظرات() 

QMainWindow قسمت اول

نویسنده :سعید دادخواه
تاریخ:چهارشنبه 29 دی 1389-10:44 ب.ظ

سلام خدمت دوستان

در این قسمت سعی داریم با یکی از مهمترین کلاس های مجموعه کیوتی اشنا بشیم و اونم QMainWindow هستش . اما

QMainWindow چیست ؟

هر گاه شما قصد داشته باشید که یک برنامه کامل رو طراحی کنید ، هر گاه شما نیاز داشته باشید که برنامه تون شکل استانداردی داشته باشه ، هر گاه برنامه تون نیاز به منو بار و یا تولبار و یا statusbar داره ، در واقع و در اصل شما نیاز به یه main window پیدا کردین . پس main window کامل ترین نوع یک فرم در کیوتی هستش یعنی فرمی که میتونه منوبار و تولبار و ... رو داشته باشه . این ویژگی در QWidget و QDialog وجود نداره . در شکل زیر یه MainWindow رو میبینید.

#include <QApplication>
#include <QMainWindow>
#include <QLabel>
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QMainWindow mainWindow;
  QLabel *label =new QLabel("<center>Central Widget</center>");
  mainWindow.setCentralWidget(label);
  mainWindow.show();
  return a.exec();
}

این یه مثال ساده از QMainWinow هست .

توجه کنید که QLabel توانایی پردازش تگ های html رو داره . یعنی شما میتونید یه متن فرمت شده با html رو توی یه Label نمایش بدین و نکته دیگه تابع setCentralWidget هستش . هر QMainWindow میتونه یه ویدجت مرکزی داشته باشه که در واقع قسمت اصلی یه برنامه است و در کل QMainWindow پخش میشه . مثلا توی برنامه نقاشی ویدجت مرکزی میتونه یه بوم برای نقاشی باشه.

گفتن این نکته خالی از لطف نیست که برنامه های بزرگ معمولا از QMainWindow ارث برده و بنا به نیاز خودشون به اون ویژگی هایی اضافه میکنند که در قسمت های بعدی به اون اشاره میکنیم.

خسته نباشید




داغ کن - کلوب دات کام
نظرات() 


شبکه اجتماعی فارسی کلوب | Buy Mobile Traffic | سایت سوالات