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

وبلاگ جدید من

نویسنده :سعید دادخواه
تاریخ:پنجشنبه 24 فروردین 1391-06:35 ب.ظ

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



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

دیالوگ ها بخش دوم

نویسنده :سعید دادخواه
تاریخ:جمعه 8 بهمن 1389-02:08 ق.ظ

دیالوگ هایی که مدال نیستند Non-Modal Dialogs
در تمام موارد هم نمیشه از Modal dialogs استفاده کرد . بعضی از مواقع کارایی دیگه ای مد نظر ماست .مثال خوبش دیالوگ های سرچ درون یه ویرایشگر متن هست . در این مواقع کاربر نیاز داره که همزمان با هر دو بخش برنامه یعنی هم document و هم دیالوگ سرچ بتونه ارتباط داشته باشه. در مواقعی که شما یه دیالوگ رو با هدف Non modal dialog پیاده سازی کردین باید از تابع show برای نمایش اون استفاده کنید . نکته بسیار مهم این است که تابع show بلافاصله برمیگرده و ارتباط شما با دیالوگ باید با استفاده از سیگنال ها اسلات ها انجام بشه. خوب یه نکته مهم دیگه اینکه : شما اگه توی یه تابعی نیاز به یه دیالوگ داشتین ، اگه non modal هستش شما حتما باید اونو با new ایجاد ش کنید در غیر این صورت با برگشت بلا فاصله show و خروج از تابعی که این شی رو توش ساختین ، دیالوگتون از بین میره اما اگه شما modal هستش میتونید اونو یا با New یا روی استک بگیرید.( چون تابع exec تا زمانیکه دیالوگ هستش بر نمیگرده ).


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

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 به اکشن نسبت بدم یا چطوری یه اکشن آیکن داشته باشه که همه این ها در آینده بحث خواهد شد ان شا الله


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

مثال : برنامه مبدل مبنا

نویسنده :سعید دادخواه
تاریخ:دوشنبه 27 دی 1389-06:58 ب.ظ

سلام دوستان

مثال امروز ما در مورد یک برنامه بسیار ساده است که یه عدد دهدهی رو از ورودی میگیره و مقدار های مبنای ۱۶ و ۲ اونو نشون میده . به تصویر نگاه کنید.اگرم کاربر به جای عدد حروف رو وارد کنه برنامه بهش گیر میده


در این مثال از تابع 
int QString::toInt ( bool * ok = 0, int base = 10 ) const
شده که برای تبدیل یک رشته به یک عدد استفاده میشه. اشاره گری که به یه متغیر بولی نیاز داره برا اینه که اگه فرضا در رشته ما عدد نبود و چیزای دیگه بود مقدار ok برابر با false بشه

و همچنین از  تابع

QString QString::number ( long n, int base = 10 ) [static]

 
استفاده شده که برای تبدیل یک عدد به یک رشته به کار میرود در ضمن این تابع استاتیک هست.






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

Meta-object Compiler moc

نویسنده :سعید دادخواه
تاریخ:یکشنبه 26 دی 1389-08:18 ب.ظ

مفهوم سیگنال و اسلات موجود در کیوتی یه مفهوم محض سی پلاس پلاس نیست یعنی سی پلاس پلاس استاندارد چیزی به نام سیگنال و اسلات نداره بلکه این مفاهیم توسط کیوتی به سی پلاس پلاس اضافه شده است .به همین دلیل برنامه ای به نام moc(meta object compiler ) برای تبدیل سیگنال و اسلات ها به سی پلاس پلاس استاندارد استفاده میشه.moc  برای هر کلاسی که از QObject ارث برده باشه یه فایل سی ++ اضافه ایجاد میکنه 


Property system
هر کلاسی در کیوتی میتونه مجموعه ای از ویژگی ها رو داشته باشه ( property ) که میتونند مورد بررسی و ست کردن قرار بگیرند. برای مثال QLabel دارای ویژگی text هست که مقدار این ویژگی متنی است که لیبل نمایش میدهد . برای هر ویژگی دو تابع وجود داره یکی برای برگرداندن مقدار فعلی اون ویژگی و دیگری برای ست کردن مقدار جدید برای اون ویژگی. مثلا در مورد QLabel تابع text() مقدار فعلی رشته موجود در اون لیبل رو بر میگردونه و setText()مقداری جدید به اون نسبت میده. این خصوصیت مربوط به کلاس هایی است که از QObject ارث برده میشوند و ما با تابع   QObject::property() میتونیم کلیه ویژگی های یه کلاس رو برگردونیم و با تابع QObject::setProperty() میتونیم مقدار یه property رو ست کنیم . نکته بسیار مهم و کلیدی و دلیل انعطاف این سیستم این هست که تابع اول لیستی از QString ها رو به ما برمیگردونه و تابع دوم هم یه QString از ما انتظار داره برای تعیین property . حسنی که این روش داره اینه که شما هرچقدر که دلتون خواست میتونید property به کلاستون اضافه کنید بدون اینکه کد های قبلی تغییر کنند . درست مثل property editor موجود در QtDesigner 

خلاصه مطلب این که moc برای هر کلاسی که از QObject ارث برده شده نیاز هست .  قبل از اینکه کامپایلر سی ++ دست به کار بشه باید این کامپایلر تمام فایل هایی که ویژگی ذکر شده رو دارند رو بررسی کنه و کدی تولید کنه که در فایلی به نام moc_nameoffile.cpp برای مثال ذخیره بشه.


نوع مطلب : عمومی 

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

ابزار ها و امکانات مکمل کیوتی

نویسنده :سعید دادخواه
تاریخ:یکشنبه 26 دی 1389-06:57 ب.ظ

سلام

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

ادامه مطلب

نوع مطلب : عمومی 

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

مدیریت حافظه در سلسله مراتب اشیا

نویسنده :سعید دادخواه
تاریخ:یکشنبه 26 دی 1389-04:53 ب.ظ

سلام دوستان

همون طور که میدونید سی پلاس پلاس مدیریت حافظه رو به عهده برنامه نوس گذاشته است یعنی اینکه وقتی شما به عملگر new یه شی ی رو ایجاد میکنید این شی از بین نمیره تا یا برنامه به انتها برسه یا از عملگر delete برای حذف اون استفادن کنیم
اما در کیوتی این امکان وجود داره که شما در شرایط های خاصی مدیریت حافظه رو به عهده کیوتی بذارین . بذارید بیشتر توضیح بدم . اشیای کلاس هایی که از QObject ارث میبرند میتونند یه چیزی شبیه به یه ساختار درخت مانند تشکلیل بدند .  همون طور که دیدیم اشیا ممکن است فرزند داشته باشند . اگرپدر ( همون شی ای که فرزند داره ) delete بشه تمام فرزندان اون هم در کیوتی به صورت خودکار حذف میشند. این بچه ها تازه میاند و بچه ها شونو حذف میکنند و همین طور تا آخر
پس اگر ریشه اون درخت فرضی از  بین بره کیوتی به صورت خودکار بقیه درخت رو حذف میکنه. این ویژگی بسیار خوب هست چون شما رو از دردسر اینکه اشیا رو چگونه مدیریت کنید و کی از بین ببرینشون راحت میکنه.
اما برای اینکه این مدیریت حافظه توسط کیوتی اعمال بشه باید تمام بچه ها و بچه های بچه ها و بچه های .... روی heap گرفته شده باشند .یعنی با عملگر new ساخته شده باشند در غیر این صورت زمانی که مدت عمر یه شی یا یه متغیر تمام شد خود به خود طبق ویژگی های سی پلاس پلاس از بین خواهد رفت.این مشکل کیوتی کار های تاز کار هست . اشیا رو روی استک میگیرند و خوب بعد از اینکه مثلا سازنده کلاس به انتها رسید کامپایلر اشیای ایجاد شده روی سstack رو از بین میبره  و به همین دلیل هست که مثلا فرم یه لحظه کوتاه نمایش داده میشه و ازبین میره.
فعلا


نوع مطلب : عمومی 

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

ساختن ویدجت دلخواه

نویسنده :سعید دادخواه
تاریخ:یکشنبه 26 دی 1389-03:35 ب.ظ

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

در این قسمت قصد داریم که با نحوه ساختن یه ویدجت به دلخواه خودمون آشنا بشیم. آموزش این قسمت همراه با یه فایل ویدیویی هست !
خوب برای اینکه ما بتونیم خودمون یه فرم دلخواه طراحی کنیم ( یه ویدجت جدید خلق کنیم )‌باید از کلاس QWidget ارث برده و باتوجه به نیاز خودمون اونو تغییر بدیم

ادامه مطلب

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

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

Signals and Slots part Two

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

در مورد سیگنال و اسلات نکات زیر مهم هستند 

اولا اینکه سیگنال ها میتونند وقتی  emit میشند (فریاد زده میشند )یه مقداری رو هم بفرستند . مثلا در مورد لاین ادیت سیگنالی هست با عنوان textChanged . این سیگنال وقتی فرستاده میشه که متن درو ن یه جعبه متن تغییر کنه خوب ما که فقط بدون متن این جعبه متن تغییر کرد دردی ازمون دوا نمیشه ما نیاز به این داریم که بدونیم متن جدید چیه 
مسلما.
ادامه مطلب رو ببینید

ادامه مطلب

نوع مطلب : عمومی 

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

Signals and Slots part one

نویسنده :سعید دادخواه
تاریخ:شنبه 25 دی 1389-11:28 ب.ظ

سلام خدمت دوستان عزیز

یکی از مفاهیم کلیدی در مورد برنامه نویسی در کیوتی مبحث سیگنال و سلات هستش . این مفاهیم در واقع ابزار های ارتباط اشیاء یک برنامه با هم هستند.
ادامه مطلب رو از دست ندین

ادامه مطلب

نوع مطلب : عمومی 

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

QLineEdit

نویسنده :سعید دادخواه
تاریخ:سه شنبه 21 دی 1389-12:49 ب.ظ

سلام دوستان عزیزم

خوب جلسات قبلی در مورد QPushButton صحبت کردیم امروز در مورد QLineEdit که یکی دیگه از ویدجت های کیوتی هست و خوب به طبع بسیار مهمه صحبت میکنیم . این ویدجت برای گرفتن یه خط متن (Text ) از کاربر به کار میره و ما 
تو فارسی بهش میگیم جعبه متن.
بقیش تو ادامه مطلب


ادامه مطلب

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

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

QPushButton

نویسنده :سعید دادخواه
تاریخ:سه شنبه 21 دی 1389-12:58 ق.ظ

سلام خدمت دوستای عزیز

برای ادامه کار نیازه که با چند تا از ویدجت های کیوتی بیشتر آشنا بشیم . امروز پر کاربرد ترین ویدجت رو باهم بررسی میکنیم اونم دکمه است ( یاد آوری میکنم که ویدجت در کیوتی اصطلاحی است به تک تک کامپوننت های مورد نیاز برای ساخت یه واسط گرافیکی Graphical user interface استفاده میشه

جالبه بدونید که کیوتی برای هرچیزی کلاس داره مثلا برای رنگ برای نقطه برای دکمه برای مستطیل که به مرور با بیشترشو ن آشنا میشیم

اما کلاسی که امروز می خوایم یکم در موردش بیشتر بدونیم کلاس QPushButton است . در برنامه نویسی gui دکمه ها نقش حیاتی رو بازی میکنند چون به نوعی ادامه روند برنامه به اونا بستگی داره ، تا روشون کلیک نشه اتفاقی نمی افته . همون طور که گفتم دکمه ها در کیوتی با کلاس QPushButton ساخته میشند که این کلاس از کلاس QWidget ارث میبره و به طبع ساختن شی ازش با مثالی که دیروز دیدم زیاد تفاوتی نداره .

اول از همه یادتون نره که کلاس QPushButton رو Include  کنید

بقیه مطلب در ادامه مطلب !


ادامه مطلب

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

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


  • تعداد صفحات :2
  • 1  
  • 2  
شبکه اجتماعی فارسی کلوب | Buy Mobile Traffic | سایت سوالات