نمایش نتایج 1 تا 15 از 15

نام تاپیک: آموزش سريع Qt4

  1. #1
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    Post آموزش سريع Qt 4

    بسم الله الرحمن الرحيم

    آموزش سريع Qt 4



    تاريخ شروع آموزش : 1391/12/6
    با كليك بر روي دكمه تشكر يك صلوات براي شفاي بيماران
    آخرین ویرایش به وسیله complexcoding : چهارشنبه 21 فروردین 1392 در 23:10 عصر

  2. #2
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    آموزش كيوت 4
    آموزش كيوت 4 . در اين آموزش، شما مفاهيم پايه برنامه نويسي GUI را با كيوت4 و سي پلاس پلاس ياد مي گيريد.اين آموزش براي برنامه نويسان تازه كار و متوسط مناسب مي باشد.

    فهرست محتويات آموزش

    Introduction
    Utility classes
    Strings
    Date & time
    First Programs
    Menus and Toolbars
    Layout Management
    Events and Signals
    Widgets
    Widgets II
    Painting
    Custom Widget
    Breakout game

    آخرین ویرایش به وسیله complexcoding : دوشنبه 07 اسفند 1391 در 10:34 صبح

  3. #3
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    معرفي ابزار Qt4
    در اين بخش از آموزش كيوت 4 ، ما كتابخانه كيوت 4 را معرفي مي كنيم. ايتدا كتابخانه كيوت 4 را نصب و سپس يك برنامه كوچك ايجاد مي كنيم.

    توسعه چارچوب كيوت
    ابزار كيوت در ابتدا توسط Trolltech كه يك كمپاني نرم افزار نروژي بود توسعه داده مي شد. در سال 2008 اين كمپاني توسط نوكيا خريداري شد. اين شركت به چارچوب توسعه كيوت تغيير نام پيدا كرد. در آگوست 2012 يك شركت توسعه دهنده فنلاندي Digia تكنولوژي نرم افزار كيوت را از نوكيا خريد. در عين حال يك پروژه كيوت منبع باز توسعه داده شد. اين وبسايت براي ابزار كيوت منبع باز مي باشد كه مي توانيد به آن مراجعه كنيد:
    www.Qt-Project.org

    ابزار كيوت
    كيوت يك چارچوب توسعه برنامه هاي چند سكويي مي باشد. بعضي از برنامه هاي كاربردي كه در حاضر توسط كيوت توسعه داده شده اند عبارتند از : KDE , Opera , Google Earth , Skype , VLC , Maya يا Mathematica. كيوت در ابتدا به صورت عمومي در مي سال 1995 منتشر شد. كه به دو صورت مجاز بود.مي توان از آن براي ايجاد برنامه هاي منبع باز و يا حتي امكانات تجاري مورد استفاده قرار داد. تولكيت كيوت بسيار قدرتمند مي باشد.ابزار كيوت به خوبي در جامعه منبع باز ارائه شده است. هزاران نفر از توسعه دهندگان منبع باز از كيوت در سراسر جهان استفاده مي كنند.


    دانلود
    به صفحه دانلود مي رويم.ما مي توانيم هر دو نصب و راه اندازي آنلاين و آفلاين را داشته باشيم.ممكن است كل SDK را بصورت جداگانه يا بخشي از آن را دانلود كنيم. SDK مخفف Software Development Kit اگر بصورت كامل دانلود شود برخي ابزار اضافي خواهد داشت. حالا بعدا هم مي توانيد دانلود كنيد. در اين صفحه چگونگي نصب كتابخانه 4.8.3 براي لينوكس نشان داده شده است.
    $ ls qt-everywhere-opensource-src-4.8.3.tar.gz 
    qt-everywhere-opensource-src-4.8.3.tar.gz
    از اين صفحه كتابخانه هاي كيوت 4 را دانلود مي كنيم

    $ tar -xzvf qt-everywhere-opensource-src-4.8.3.tar.gz

    فرمان آزادسازي فايل هاي فشرده شده در مسير راهنماي qt-everywhere-opensource-src-4.8.3
    $ du -hs qt-everywhere-opensource-src-4.8.3
    685M qt-everywhere-opensource-src-4.8.3
    فضاي لازم براي ذخيره 685 مگابايت مي باشد.

    $ cd qt-everywhere-opensource-src-4.8.3
    مسير را ايجاد كرديم حالا به دقت README را مي خوانيم و فايل را اجرا مي كنيم فرآيند نصب و راه اندازي راحت و آسان مي باشد.


    نصب كردن
    ما كتابخانه را از روش معمول يا كلاسيك نصب مي كنيم. روي سيستم هاي يونيكس فرآيند نصب و اجرا به سه قسمت تقسيم شده است.
    1- پيكربندي
    2- ساختمان
    3- نصب و اجرا
    $ ./configure -prefix /usr/local/qt4

    از كدام نسخه از كيوت شما مي خواهيد استفاده كنيد؟
    نوع 'c' اگر شما نسخه تجاري را مي خواهيد.
    نوع 'o' اگر شما نسخه منبع باز را مي خواهيد.

    در ابتدا پيكربندي اسكريپت را ايجاد مي كنيم. اين اسكريپت از ما مي پرسد كه آيا نسخه تجاري كتابخانه كيوت 4 را مي خواهيد يا منبع باز. اين اسكريپت كتابخانه را براساس نوع ماشين ما پيكربندي مي كند. توسط مسير پيش فرض /usr/local/Trolltech/Qt-4.8.3 كيوت نصب مي شود. اين مسير پيش فرض را مي توان توسط اسكريپت تغيير داد. كتابخانه را در مسير /usr/local/qt4 نصب مي كنيم. توجه داشته باشيد كه كلمه نصب و راه اندازي در اينجا دو معني دارد.كل فرآيند شامل سه مرحله هست. و همچنين حركت فايل به مكان پيش فرض نيز معني مي دهد، هركدام در مرحله سوم گذشته مي باشند.

    اين نسخه منبع باز مي باشد.
    شما اجازه داريد تا تحت اين قوانين و مقررات مجوز عمومي (GNU (LGPL ورژن 2.1 هستيد.
    شما همچنين اجازه داريد تا تحت قوانين و مقررات مجوز عمومي (GNU (GPL ورژن 3 نيز استفاده كنيد.

    نوع '3' مجوز عمومي GNU ورژن 3 مي باشد.
    نوع 'L' مجوز عمومي كمتر GNU ورژن 2.1 مي باشد.
    نوع 'yes' ارائه مجوز را مي پذيرد.
    نوع 'no' ارائه مجوز را رد مي كند. آيا شما قوانين مجوز اين نسخه را مي پذيريد؟ بله مجوز را با اين شرايط تاييد كنيد.

    كيوت حالا ساختمان را پيكربندي مي كند.فقط 'make' را اجرا كنيد.هنگامي كه همه چيز ساخته شد، شما بايد 'make install' را اجرا كنيد.
    كيوت در /usr/local/qt4 نصب مي شود.براي پيكربندي مجدد 'make confclean' و 'configure' را اجرا كنيد.
    ما بعد از پايان پيكربندي يك پيام دريافت مي كنيم.
    make $
    ما از فرمان make براي ساخت روند استفاده مي كنيم.نصب ساختمان تولكيت كيوت ممكن است چندين ساعت طول بكشد البته اين به عملكرد شما نيز ربط دارد.
    در آخرين مرحله از نصب و يا انتقال فايل ها به دايركتوري .

    sudo را نصب كنيد=> "sudo make install"

    اين دستور پس از اتمام مراحل نصب مي باشد.اين كتابخانه حالا در مسير /usr/local/qt4 نصب شده است.
    $ du -sh /usr/local/qt4
    435M /usr/local/qt4

    ميزان فضاي لازم براي اين مسير 435 مگابايت مي باشد.همانطور كه مي بينيد، كيوت يك كتابخانه بزرگ مي باشد.آخرين چيزي كه ما انجام مي دهيم،
    اضافه كردن path كيوت 4 به متغير path سيستم مي باشد.
    بخاطر برهم خوردن كاربران بايد يكي از اين دوفايل profile. يا bashrc. ويرايش شوند
    PATH=/usr/local/qt4/bin:$PATH export PATH 

    ما يك پچ به مسير كتابخانه كيوت 4 اضافه كرديم كه پس از ورود ديگر اين تغييرات فعال خواهند شد.
    آزمايش يك مثال كوچك

    در نهايت يك نمونه كد كوچك مي نويسيم.

    #include <QApplication>
    #include <QWidget>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    QWidget window;

    window.resize(250, 150);
    window.setWindowTitle("Simple example");
    window.show();

    return app.exec();
    }

    براي ساخت اين مثال از ابزار بسيار مفيد qmake استفاده مي كنيم.
    qmake -project
    qmake
    make

    اگر در مسير نصب و اجراي كيوت 4 يك بخش از متغير PATH نبود ما مي توانيم يك Full PATH از ابزار qmake تهيه كنيم.
    /usr/local/qt4/bin/qmake -project
    /usr/local/qt4/bin/qmake
    make


    تصوير : يك مثال كوچك
    نصب و اجرا تمام شد OK
    اين فصل يك معرفي اجمالي بر كتابخانه كيوت بود.

    پايان بخش Introduction
    آخرین ویرایش به وسیله complexcoding : پنج شنبه 22 فروردین 1392 در 01:27 صبح

  4. #4
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    كابرد كلاس هاي كيوت4

    در اين قسمت از آموزش برنامه نويسي ++C كيوت 4 ، ما درباره دسترسي به كلاس هاي كابردي كتابخانه كيوت4 صحبت مي كنيم.كتابخانه كيوت 4 شامل دسته هاي بزرگي از كلاس هاي كمكي مي باشد، برنامه نويسان از اين كلاس ها براي راحت تر كدنويسي كردن استفاده مي كنند. اين كلاس ها شامل كار با رشته ها ، فايل ها ، فايل هاي XML ، جريان ها ، پايگاه داده يا شبكه مي باشد.اينجا تنها يك قطره كوچك از دريا نشان داده خواهد شد.
    كتابخانه كيوت4 براي ايجاد برنامه هاي كنسول و گرافيكي استفاده مي شود. در اين فصل، ما برخي كلاس هاي كمكي در برنامه هاي پايه كنسول توضيح مي دهيم.

    چاپ متن در كنسول
    اين يك برنامه ساده مي باشد. اين برنامه بعضي متون را در يك كنسول ويندوز قرار مي دهد.
    console.cpp
    #include <iostream>

    int main()
    {
    std::cout << "console application\n";
    }

    در مثال اول ما با استفاده از كتابخانه STL مخفف Standard Template Library براي چاپ متن استفاده مي كنيم.
    console2.cpp
    #include <QTextStream>

    int main()
    {
    QTextStream out(stdout);
    out << "console application\n";
    }
    مثال دوم نشان مي دهد كه چطور با استفاده از كتابخانه برنامه نويسي كيوت 4 يك متن را چاپ كنيم.
    Output
    console application

    QFile
    QFile يك كلاس براي خواندن و نوشتن در فايل ها مي باشد.
    در مثال اول ما يك جمله را در يك فايل مي نويسيم.
    file.cpp

    [#include <QTextStream>
    #include <QFile>

    int main()
    {

    QFile data("myfile");

    if (data.open(QFile::WriteOnly)) {
    QTextStream out(&data);
    out << "You make me want to be a better man." << endl;
    }
    }

    Output
    $ cat myfile 
    You make me want to be a better man.

    در مثال بعدي ما محتوا در از درون يك فايل به درون يك كنسول پرينت مي گيريم. اين متن به زبان مجارستاني خواهد بود،بنابراين ما بايد كدك درست را تنظيم كنيم.
    szerelem
    S a régi szeretőmér­
    mit nem cselekednék,
    tengerből a vizet
    kanállal lemerném.

    S a tenger fenekéről
    apró gyöngyöt szednék,
    s a régi szeretőmnek
    gyöngykoszorút kötnék.

    szerelem.cpp
    #include <QTextStream>
    #include <QFile>

    int main()
    {
    QFile data("szerelem");

    QString line;

    if (data.open(QFile::ReadOnly)) {
    QTextStream in(&data);
    QTextStream out(stdout);

    out.setCodec("UTF-8");
    in.setCodec("UTF-8");

    do {
    line = in.readLine();
    out << line << endl;
    } while (!line.isNull());
    }
    }

    Output
    S a régi szeretőmér­
    mit nem cselekednék,
    tengerből a vizet
    kanállal lemerném.

    S a tenger fenekéről
    apró gyöngyöt szednék,
    s a régi szeretőmnek
    gyöngykoszorút kötnék.



    آخرین ویرایش به وسیله complexcoding : چهارشنبه 09 اسفند 1391 در 01:28 صبح

  5. #5
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    QList

    QList يكي از محتواي عمومي كيوت 4 مي باشد و براي ذخيره مقادير در يك ليست استفاده شده و براي دسترسي سريع مبتني بر شاخص و همچنين حذف و درج سريع مناسب مي باشد.
    mlist.cpp
    #include <QTextStream>
    #include <QList>

    int main()
    {
    QTextStream out(stdout);

    QList<QString> list;

    list << "Balzac" << "Tolstoy" << "Guldbrassen"
    << "London" << "Galsworthy" << "Sienkiewicz";

    qSort(list);

    for (int i = 0; i < list.size(); ++i) {
    out << list.at(i) << endl;
    }

    }

    در اين كد مثال،ما يك ليست بزرگ از نوشته هاي زياد ايجاد مي كنيم.ما نوع را بر اساس حروف الفبا تعيين و در كنسول چاپ مي كنيم.
    Output
    Balzac
    Galsworthy
    Guldbrassen
    London
    Sienkiewicz
    Tolstoy

    QDir
    كلاس QDir دسترسي به ساختار دايركتوري ها و محتواي آنها را براي ما فراهم مي كند.
    home.cpp


    #include <QTextStream>
    #include <QDir>

    int main()
    {
    QTextStream out(stdout);
    QString home = QDir::homePath();
    out << home << endl;
    }

    اين مثال دايركيتوري خانگي را تعيين مي كند و آن را در كنسول به چاپ مي رساند.
    Output
    /home/vronskij

    در مثال زير ما از كلاس QDir استفاده مي كنيم
    filters.cpp
    #include <QTextStream>
    #include <QDir>


    int main()
    {
    QTextStream out(stdout);
    QDir dir;

    QStringList filters;
    filters << "*.c" << "*.c~";
    dir.setNameFilters(filters);

    QFileInfoList list = dir.entryInfoList();

    for (int i = 0; i < list.size(); ++i) {
    QFileInfo fileInfo = list.at(i);
    out << QString("%1").arg(fileInfo.fileName());
    out << endl;
    }
    }

    در اين مثال همه فايل ها در يك دايركتوري خاص تعيين مي كند و يك فيلتر مشخص روي فايل ها اعمال مي كند.
    Output
    $ ls -F
    anim* anim.c anim.c~ filters*
    $ ./filters
    anim.c
    anim.c~

    QTime
    كلاس QTime تابع هاي زمان ساعت را فراهم مي كند.
    در مثال زير، زمان كنوني محلي را در كنسول چاپ مي كنيم.
    mtime.cpp
    #include <QTextStream>
    #include <QTime>

    int main()
    {
    QTextStream out(stdout);

    QTime qtime = QTime::currentTime();
    QString stime = qtime.toString(Qt::LocalDate);

    out << stime << endl;
    }


    مراقب باشيد كه اين فايل حتما بايد با نام time.cpp باشد.
    Output
    $ ./time 
    10:30:33 PM

    QString
    كلاس QString براي كار بر روي رشته ها استفاده مي شود. شايد مهمترين كلاس در كتابخانه كيوت 4 همين كلاس باشد.
    concat.cpp
    #include <QTextStream>

    int main()
    {
    QString a = "Disziplin ";
    QString b = "ist ";
    QString c = "Macht.\n";

    QTextStream out(stdout);
    out << a + b + c;
    }

    در مثال اول ما سه رشته را به هم الحاق يا پيوست مي دهيم.
    Output
    $ ./concat
    Disziplin ist Macht.

    در مثال دوم يك رشته را توسط الحاق يك متن يكي پس از ديگري مي سازيم.
    append.cpp
    #include <QTextStream>

    int main()
    {

    QString string = "Whether I shall ";

    string.append("turn out to be the hero of my own life, \n");
    string.append("or whether that station will be held by anybody else, \n");
    string.append("these pages must show.\n");

    QTextStream out(stdout);
    out << string;
    }

    Output

    $ ./append
    Whether I shall turn out to be the hero of my own life,
    or whether that station will be held by anybody else,
    these pages must show.

    در مثال بعد آرگومان هاي جايگزين را نشان مي دهد.
    arg.cpp
    #include <QTextStream>

    int main()
    {
    QString string = "What if I gave you %1 red roses?";
    int num = 21;

    QTextStream out(stdout);
    out << string.arg(num) << endl;
    }
    Output
    $ ./str3 
    What if I gave you 21 red roses?

    در مثال زير نشان مي دهد كه چطور مي توان يك سايز را براي يك رشته تعيين كرد.
    size.cpp
    #include <QTextStream>

    int main()
    {
    QString string = "The history of my life.";

    QTextStream out(stdout);
    out << "The string has " + QString::number(string.size())
    + " characters." << endl;
    }

    Output
    ./size
    The string has 23 characters.

    مثال بعد درباره ساخت رشته هاي بزرگ و كوچك مي باشد.
    uplow.cpp
    #include <QTextStream>

    int main()
    {
    QString string = "The history of my life.";

    QTextStream out(stdout);
    out << string.toLower() << endl;
    out << string.toUpper() << endl;
    }

    Output
    $ ./uplow
    the history of my life.
    THE HISTORY OF MY LIFE.


    در اين فصل ما درباره برخي كلاس هاي مفيد در كيوت4 توضيح داديم.

    پايان بخش Utility Classes
    آخرین ویرایش به وسیله complexcoding : چهارشنبه 09 اسفند 1391 در 01:30 صبح

  6. #6
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    كار با رشته ها
    در اين فصل ما با رشته ها كار مي كنيم.كيوت4 كلاس QString را براي كار با رشته ها دارد. اين كلاس بسيار مفيد و داراي متدهاي بي شمار مي باشد.
    كلاس QString يك رشته كاراكتر يونيكد فراهم مي كند.يك رشته به عنوان bit-16 در QChars ذخيره شده.هر QChar مربوط به يك كاراكتر يونيكد 4.0 مي باشد. برخلاف رشته هاي در بسياري از زبان هاي برنامه نويسي QString مي تواند اصلاح شود.
    مثال اول
    در مثال اول، ما با تعداد معدودي از متدهاي پايه در كلاس QString كار مي كنيم.
    basic.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    QString a = "love";

    a.append(" chess");
    a.prepend("I ");

    out << a << endl;
    out << "The a string has " << a.count()
    << " characters" << endl;

    out << a.toUpper() << endl;
    out << a.toLower() << endl;

    return 0;
    }
    در اين كد،ما QString را آغاز مي كنيم. الحاق يا حذف موارد اضافي رشته و در آخر هم طول رشته را به دست آورده و در خروجي موارد اصلاح شده ، اضافه شده و كاهش داده شده را چاپ مي كنيم.
    QString a = "love";

    يك شي QString ساخته شده است.
    a.append(" chess");
    a.prepend("I ");

    ما متن را از رشته اوليه پيوند و يا حذف مي كنيم . رشته در محل تغيير هست.
    out << a << endl;
    I love chess در پايان چاپ مي شود.
    out << "The a string has " << a.count() 
    << " characters" << endl;

    متد Count() يك تعداد كاراكترهاي يك رشته را باز مي گرداند. متدهاي length() و Size() با هم يكسان هستند.
    out << a.toUpper() << endl;    
    out << a.toLower() << endl;
    اين دو متد رشته كوچك شده و بزرگ شده را بازمي گردانند.نكته اين هست كه اين متدها در رشه تغييري ايجاد نمي كنند بلكه كوچكي و بزرگي حروف آن را مشخص مي كنند.
    Output
    $ ./basic 
    I love chess
    The a string has 12 characters
    I LOVE CHESS
    i love chess
    راه اندازي رشته ها

    يك QString مي تواند از چند راه ايجاد شود.
    init.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    QString str1 = "The night train";
    out << str1 << endl;

    QString str2("A yellow rose");
    out << str2 << endl;

    std::string s1 = "A blue sky";
    QString str3 = s1.c_str();
    out << str3 << endl;

    std::string s2 = "A thick fog";
    QString str4 = QString::fromAscii(s2.data(), s2.size());
    out << str4 << endl;

    char s3[] = "A deep forest";
    QString str5(s3);
    out << str5 << endl;

    return 0;
    }
    ما 5 راه براي راه اندازي يك QString ارائه مي دهيم.
    QString str1 = "The night train";
    اين يك روش مرسوم در ايجاد يك رشته درون زبان هاي كامپيوتري مي باشد.
    QString str2("A yellow rose");
    اين يك شي براي ايجاد QString مي باشد.
    std::string s1 = "A blue sky";
    QString str3 = s1.c_str();
    ما يك شي رشته از كتابخانه ++C داريم.با استفاده از متد c_str() مي توانيم كراكترهاي تهي توليد كنيم. آرايه كاراكترها ما را ياد رشته ها در سي كلاسيك مي اندازد كه از آن طريق نيز مي توانيم يك متغيير QString داشته باشيم.
    std::string s2 = "A thick fog";
    QString str4 = QString::fromAscii(s2.data(), s2.size());

    در اين خطوط از كدها ما رشته استاندارد ++C را به QString تبديل مي كنيم. از متد fromAscii() استفاده مي كنيم.اين متد يك اشاره گر از آرايه اي از كاراكترها مي گيرد. اين اشاره گر با متد data() از std::string بازگشته است. پارامتر دوم اندازه std::string مي باشد.
    char s3[] = "A deep forest";
    QString str5(s3);
    اين يك رشته از زبان سي مي باشد كه طبق معمول از آرايه از كاراكترها تشكيل شده است. يكي از QStringهاي ساخته شده مي تواند آرايه اي از كاراكترها را به عنوان پارامتر دريافت كند.
    Output
    $ ./init 
    The night train
    A yellow rose
    A blue sky
    A thick fog
    A deep forest

    دسترسي به عناصر رشته
    يك QString دنباله اي به ترتيب از QCharها مي باشد. به عناصر يك رشته با استفاده از اپراتور [] يا روش ()at مي توان دسترسي پيدا كرد.
    access.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    QString a = "Eagle";

    out << a[0] << endl;
    out << a[4] << endl;

    out << a.at(0) << endl;

    if (a.at(5).isNull()) {
    out << "Outside the range of the string" << endl;
    }

    return 0;
    }
    ما برخي از كاراكترهاي مشخص شده در QString را چاپ مي كنيم.
    out << a[0] << endl;
    out << a[4] << endl;
    اولين و پنجمين عنصر يك رشته را چاپ مي كند.
    out << a.at(0) << endl;
    با استفاده از روش ()at ما اولين كاراكتر را در رشته بازيابي مي كنيم.
    if (a.at(5).isNull()) {
    out << "Outside the range of the string" << endl;
    }
    متد at() در صورتي كه كاراكتري خارج از رنج در رشته را درخواست كنيم مقدار null را بر مي گرداند.
    Output
    $ ./access 
    E
    e
    E
    Outside the range of the string

    طول رشته
    اينجا سه روش براي دريافت طول يك رشته وجود دارد. متد size() ، count() ، و length(). همه ي اين متدها كار يكساني انجام مي دهند.آنها تعداد كاراكترها در يك رشته مشخص شده را باز مي گردانند.
    length.cpp
    #include <QTextStream>

    int main()
    {
    QTextStream out(stdout);

    QString s1 = "Eagle";
    QString s2 = "Eagle\n";
    QString s3 = "Eagle ";
    QString s4 = "орел";

    out << s1.length() << endl;
    out << s2.length() << endl;
    out << s3.length() << endl;
    out << s4.length() << endl;

    return 0;
    }

    در مثال بالا ما سايز چهار رشته را دريافت مي كنيم.
    QString s2 = "Eagle\n";
    QString s3 = "Eagle ";

    هر كدام از اين دو رشته داراي يك كاراكتر سفيد مي باشد.
    QString s4 = "орел";

    اين رشته متشكل از حروف روسي مي باشد.
    Output
    $ ./length
    5
    6
    6
    8

    از ديدن خروجي متوجه مي شويم كه متد length() كاراكترهاي سفيد را هم مي شمارد.آخرين رشته داراي حروف يونيكد مي باشد كه در آن هر حرف به عنوان دو كاراكتر ذخيره شده است.
    الحاق رشته
    الحاق رشته يك ساختمان پويا از رشته ها مي باشد.اين ما اجازه مي دهد تا كنترل كاراكترهاي تعيين شده را با مقادير واقعي جايگزين كنيم. ما از متد arg() براي عمل الحاق استفاده مي كنيم.
    interpolation.cpp
    #include <QTextStream>

    int main()
    {
    QTextStream out(stdout);

    QString s1 = "There are %1 white roses";
    int n = 12;

    out << s1.arg(n) << endl;

    QString s2 = "The tree is %1m high";
    double h = 5.65;

    out << s2.arg(h) << endl;

    QString s3 = "We have %1 lemons and %2 oranges";
    int ln = 12;
    int on = 4;

    out << s3.arg(ln).arg(on) << endl;

    return 0;
    }

    اين نشانگر جايگزين كاراكترهاي % مي شود.در زير يك شماره مشخص به عنوان آرگومان به جاي كاراكتر داده مي شود. آرگومان هاي چندگانه براي يك رشته مي تواند وجود داشته باشد. متد arg() خيلي پركاربرد مي باشد اين متد مي تواند مقادير صحيح،Long،كاراكتر و Qchars و... بدهد.
    QString s1 = "There are %1 white roses";
    int n = 12;

    %1 يك نشانگر براي تعيين محل جايگزين مي باشد براي مثال ما يك عدد صحيح جايگزين كرديم.
    out << s1.arg(n) << endl;

    متد arg() يك عدد صحيح م دهد. نشانگر %1 با متغير n جايگزين شده است.
    QString s2 = "The tree is %1m high";
    double h = 5.65;

    out << s2.arg(h) << endl;

    اين سه خط نيز به همان صورتي كه توضيح داده شد توسط متد arg() به صورت خودكار مقدار h را جاي 1% قرار مي دهد.
    QString s3 = "We have %1 lemons and %2 oranges";
    int ln = 12;
    int on = 4;

    out << s3.arg(ln).arg(on) << endl;

    ما مي توانيم جايگزيني كاراكترها را به صورت چندگانه انجام دهيم.1% مراجعه به آرگومان اول و 2% به آرگومان دوم و الي آخر توسط متد arg() به صورت يك حلقه پياپي انجام شود.
    Output
    $ ./interpolation 
    There are 12 white roses
    The tree is 5.65m high
    We have 12 lemons and 4 oranges

    رشته هاي فرعي يا Substrings
    هنگام انجام پردازش متن، ما احتياج داريم تا پيدا كنيم يك متن را در بين رشته ها براي اين كار ما متدهاي left() و mid() و right() را در اختيار داريم.
    substrings.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    QString str = "The night train";

    out << str.right(5) << endl;
    out << str.left(9) << endl;
    out << str.mid(4, 5) << endl;

    QString str2("The big apple");
    QStringRef sub(&str2, 0, 7);

    out << sub.toString() << endl;

    return 0;
    }

    ما از سه متد براي پيدا كردن يك رشته بين رشته هاي ديگر استفاده مي كنيم.
    out << str.right(5) << endl;

    با متد right()، ما 5 كاراكتر سمت راست رشته str را دريافت مي كنيم. train چاپ شده است.
    out << str.left(9) << endl;

    با متد left() ما 9 كاراكتر از چپ ترين كاراكترهاي موجود در رشته str را دريافت مي كنيم. 'the night' چاپ شده است.
    out << str.mid(4, 5) << endl;

    با متد mid() ما 5 حرف شروع از موقعيت 4 را دريافت مي كنيم.'night' چاپ شده است.
    QString str2("The big apple");
    QStringRef sub(&str2, 0, 7);

    كلاس QStringRef ورژن فقط خواندني از QString مي باشد.اينجا ما يك QStringRef از بخشي از رشته str2 ايجاد مي كنيم. پارامتر دوم موقعيت مي باشد و سومي طول رشته.
    Output
    $ ./substrings 
    train
    The night
    night
    The big

    حلقه از طريق رشته
    يك QString شامل تعداد زيادي QChar مي باشد. ما مي توانيم يك حلقه از طريق همين QString براي دسترسي به عنصري در رشته ايجاد كنيم.
    looping.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    QString str = "There are many stars.";

    foreach (QChar qc, str) {
    out << qc << " ";
    }

    out << endl;

    for (QChar *it=str.begin(); it!=str.end(); ++it) {
    out << *it << " " ;
    }

    out << endl;

    for (int i = 0; i < str.size(); ++i) {
    out << str.at(i) << " ";
    }

    out << endl;

    return 0;
    }

    ما سه روش از طريق QString به شما نشان مي دهيم.چاپ مي كنيم يك كاراكتر فضا بين حروف و آن را به عنوان خروجي چاپ مي كنيم.
    foreach (QChar qc, str) {
    out << qc << " ";
    }
    كلمه كليدي foreach به فرمت Qt به زبان ++C مي باشد.foreach كه يك كلمه كليدي هست
    و پارامتر اول كلمه اي كه بايد در عنصر رشته پيدا شود و پارامتر دوم خود رشته كه درونش بايد جستجو صورت گيرد مي باشد.
    for (QChar *it=str.begin(); it!=str.end(); ++it) {
    out << *it << " " ;
    }
    در اين كد ما از تكرار كننده ها از طريق رشته استفاده مي كنيم.
    for (int i = 0; i < str.size(); ++i) {
    out << str.at(i) << " ";
    }
    ما سايز رشته را محاسبه مي كنيم و از متد at() براي دسترسي به عناصر رشته استفاده مي كنيم.
    Output

    $ ./looping
    T h e r e a r e m a n y s t a r s .
    T h e r e a r e m a n y s t a r s .
    T h e r e a r e m a n y s t a r s .

    مقايسه رشته
    QString::compare() متد استاتيكي مي باشد كه براي مقايسه بين دو رشته مناسب مي باشد.اين متد يك عدد صحيح باز مي گرداند اگر مقدار بازگردانده شده كمتر از صفر باشد پس رشه اولي كوچكتر يا كمتر از رشته دومي مي باشد. اگر صفر باشد هر دو رشته با هم برابر هستند. و در آخر اگر مقدار بازگردانده شده بيشتر از صفر باشد رشته اولي بزرگتر يا بيشتر از رشته دومي مي باشد. 'كمتر' به اين معني مي باشد كه كاراكتر تعيين شده در رشته قبل از يكي ديگر از كاراكتر جدول ارائه شده است. رشته ها طبق روش زير مقايسه مي شوند. ابتدا كاراكترهاي اول دو رشته با هم مقايسه مي شود اگر مساوي يا برابر بودند به سراغ كاراكتر دوم مي رود در صورت مساوي بودن اين روند تا آخرين كاراكتر ادامه پيدا مي كند تا اينكه كاراكتري متفاوت يافت شود در غير اين صورت مقدار صفر برگردانده مي شود يعني كاراكترهاي دو رشته با هم برابر هستند.
    comparing.cpp
    #include <QTextStream>

    #define STR_EQUAL 0

    int main(void)
    {
    QTextStream out(stdout);

    QString a = "Rain";
    QString b = "rain";
    QString c = "rain\n";

    if (QString::compare(a, b) == STR_EQUAL) {
    out << "a, b are equal" << endl;
    } else {
    out << "a, b are not equal" << endl;
    }

    out << "In case insensitive comparison:" << endl;

    if (QString::compare(a, b, Qt::CaseInsensitive) == STR_EQUAL) {
    out << "a, b are equal" << endl;
    } else {
    out << "a, b are not equal" << endl;
    }

    if (QString::compare(b, c) == STR_EQUAL) {
    out << "b, c are equal" << endl;
    } else {
    out << "b, c are not equal" << endl;
    }

    c.chop(1);

    out << "After removing the new line character" << endl;

    if (QString::compare(b, c) == STR_EQUAL) {
    out << "b, c are equal" << endl;
    } else {
    out << "b, c are not equal" << endl;
    }

    return 0;
    }

    ما مورد حساس و غيرحساس را با متد compare() مقايسه مي كنيم.
    #define STR_EQUAL 0

    مقايسه سه رشته:
    if (QString::compare(a, b) == STR_EQUAL) {
    out << "a, b are equal" << endl;
    } else {
    out << "a, b are not equal" << endl;
    }

    ما رشته هاي a و b را مقايسه مي كنيم. آنها در كاراكترهاي اول با هم برابر نيستند.
    if (QString::compare(a, b, Qt::CaseInsensitive) == STR_EQUAL) {
    out << "a, b are equal" << endl;
    } else {
    out << "a, b are not equal" << endl;
    }

    به غير دو كاراكتر متفاوت در بقيه موارد رشته با هم برابر هستند. Qt::CaseInsensitive مقايسه بين موارد حساس انجام مي دهد.
    c.chop(1);

    متد chop() آخرين كاراكتر از رشته C را پاك مي كند. در حال حاضر تمام كاراكترهاي رشته هاي c و b با هم برابر هستند.
    Output
    $ ./comparing 
    a, b are not equal
    In case insensitive comparison:
    a, b are equal
    b, c are not equal
    After removing the new line character
    b, c are equal

    تبديل رشته ها
    رشته ها بكرات نياز دارند تا به نوع هاي ديگر داده تبديل شوند . toInt() و toFloat() و toLong() سه متد QString مي باشند كه هر كدام يك رشته را به ترتيب به integer و Float و Long Number تبديل مي كنند.(از چنين متدهايي بسيار وجود دارد).متد setNum() نوع داده عددي را به رشته تبديل مي كند. اين متد سربارگذاري شده و اگر به طور اتوماتيك فراخواني شود صحيح مي باشد.

    Output
    #include <QTextStream>  int main(void) {   QTextStream out(stdout);       QString s1 = "12";   QString s2 = "15";   QString s3, s4;      out << s1.toInt() + s2.toInt() << endl;       int n1 = 30;   int n2 = 40;      out << s3.setNum(n1) + s4.setNum(n2) << endl;       return 0; }


    در اين مثال ما دو رشته را به integer تبديل مي كنيم . به آنها اضافه مي كنيم. همچنين دو integer را به رشته تبديل مي كنيم و به آنها الحاق مي كنيم.
    out << s1.toInt() + s2.toInt() << endl;

    متد toInt() يك رشته را به يك integer تبديل مي كند ما دو تا از رشته هاي تبديل شده را اضافه مي كنيم.
    out << s3.setNum(n1) + s4.setNum(n2) << endl; 

    در اين مورد متد setNum()يك integer را به يك رشته تبديل مي كند. ما دو رشته را به آن الحاق مي كنيم.
    Output
    $ ./converts 
    27
    3040

    حروف
    كاراكترها به دسته هاي مختلف از قبيل اعداد، حروف،فضاهاي خالي و كاراكترهاي نقطه گذاري تقسيم شده اند.هر QString از QCharها تشكيل شده است. كلاس QChar داراي متدهاي isDigit() و isLetter() و isSpace() و isPunct() براي اجراي كارها مي باشد.
    letters.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    int digits = 0;
    int letters = 0;
    int spaces = 0;
    int puncts = 0;

    QString str = "7 white, 3 red roses.";

    foreach(QChar s, str)
    {
    if (s.isDigit()) {
    digits++;
    } else if (s.isLetter()) {
    letters++;
    } else if (s.isSpace()) {
    spaces++;
    } else if (s.isPunct()) {
    puncts++;
    }
    }

    out << QString("There are %1 characters").arg(str.count()) << endl;
    out << QString("There are %1 letters").arg(letters) << endl;
    out << QString("There are %1 digits").arg(digits) << endl;
    out << QString("There are %1 spaces").arg(spaces) << endl;
    out << QString("There are %1 punctuation characters").arg(puncts) << endl;

    return 0;
    }

    در اين مثال ما يك جمله ساده تعريف مي كنيم.ما تعدا حروف ، اعداد ، فضاها ،‌ و كاراكترهاي نقطه گذاري در جمله مي شماريم.
    int digits  = 0;
    int letters = 0;
    int spaces = 0;
    int puncts = 0;

    يك متغير عدد صحيح براي كاراكترهاي دسته بندي شده تعيين مي كنيم.
    QString str = "7 white, 3 red roses.";

    اين هم نتيجه جمله بررسي شده.
    foreach(QChar s, str) {   if (s.isDigit()) {     digits++; } else if (s.isLetter()) {     letters++; } else if (s.isSpace()) {     spaces++; } else if (s.isPunct()) {     puncts++;   }     }
    ما از كلمه ي كليدي foreach از طريق QString استفاده مي كنيم.هر كدام از اين عناصر يك QChar مي باشد.
    از متدهاي كلاس QChar براي براي تعيين دسته بندي براي كاراكترها مي توانيم استفاده كنيم.
    out << QString("There are %1 characters").arg(str.count()) << endl;
    out << QString("There are %1 letters").arg(letters) << endl;
    out << QString("There are %1 digits").arg(digits) << endl;
    out << QString("There are %1 spaces").arg(spaces) << endl;
    out << QString("There are %1 punctuation characters").arg(puncts) << endl;
    با استفاده از الحاق رشته، ما اعداد را در خروجي چاپ مي كنيم.
    Output
    $ ./letters 
    There are 21 characters
    There are 13 letters
    There are 2 digits
    There are 4 spaces
    There are 2 punctuation characters

    اصلاح رشته ها
    برخي متدها (براي مثال متد ()toLower) يك كپي اصلاح شده از رشته مرجع را باز مي گردانند. ديگر متدها رشته را در همان مكان اصلاح مي كنند. ما برخي از آنها را به شما نشان مي دهيم.

    modify.cpp
    #include <QTextStream>

    int main(void)
    {
    QTextStream out(stdout);

    QString str = "Lovely";
    str.append(" season");

    out << str << endl;

    str.remove(10, 3);
    out << str << endl;

    str.replace(7, 3, "girl");
    out << str << endl;

    str.clear();

    if (str.isEmpty()) {
    out << "The string is empty" << endl;
    }

    return 0;
    }

    ما 4 متد را كه رشته را در محلش اصلاح مي كند به شما نشان مي دهيم.
    str.append(" season");

    متد ()append يك رشته جديد به آخر رشته اصلي اضافه مي كند.
    str.remove(10, 3);

    متد ()remove از مكان مشخص شده در رشته شروع كرده و سه كاراكتر را حذف مي كند.
    str.replace(7, 3, "girl");

    متد ()replace سه كاراكتر را از مكان مشخص شده در رشته كه در بالا از كاراكتر 7 مي باشد جايگزين مي كند.
    str.clear();

    متد ()Clear يك رشته را پاك مي كند.
    Output
    $ ./modify 
    Lovely season
    Lovely sea
    Lovely girl
    The string is empty

    در اين فصل ما با رشته ها در كيوت4 كار كرديم.

    پايان بخش Strings

    آخرین ویرایش به وسیله complexcoding : دوشنبه 14 اسفند 1391 در 05:14 صبح

  7. #7
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    Thumbs up نقل قول: آموزش سريع Qt4

    تاريخ و زمان در كيوت 4
    در اين قسمت از آموزش برنامه نويسي سي پلاس پلاس كيوت 4، ما درباره تاريخ و زمان در كيوت 4 بحث مي كنيم. كيوت 4 كلاس هاي QDate ، QTime و QDateTime براي كار با تاريخ و زمان دارد.كلاس QDate براي كار با تقويم در تقويم ميلادي مي باشد.كلاس QTime با زمان ساعت كار مي كند و متدهايي را براي مقايسه و تعيين زمان فراهم مي كند البته متدهاي ديگري نيز براي دستكاري زمان وجود دارد. كلاس QDateTime هر دو شي هاي كلاس QTime و QDate را در يك شي تركيب مي كند.


    مقداردهي اوليه شي هاي date و time
    شي هاي Date و time مي توانند از دو روش ابتدايي مقداردهي شوند. ما آن را در ابتدا در سازنده شي مقداردهي مي كنيم و يا مي توانيم يك شي empty ايجاد كنيم و آن را از آخرين ديتا يا تاريخ پر كنيم.
    init.cpp
    #include <QTextStream>
    #include <QDate>
    #include <QTime>

    int main(void)
    {
    QTextStream out(stdout);

    QDate dt1(2011, 4, 12);
    out << "The date is " << dt1.toString() << endl;

    QDate dt2;
    dt2.setDate(2011, 3, 3);
    out << "The date is " << dt2.toString() << endl;

    QTime tm1(17, 30, 12, 55);
    out << "The time is " << tm1.toString("hh:mm:ss.zzz") << endl;

    QTime tm2;
    tm2.setHMS(13, 52, 45, 155);
    out << "The time is " << tm2.toString("hh:mm:ss.zzz") << endl;
    }
    ما ديتا و و زمان را از دو روش مقداردهي اوليه مي كنيم.
    QDate dt1(2011, 4, 12);

    سازنده شي QDate سه پارامتر مي دهد، سال ، ماه ، و روز.
    out << "The date is " << dt1.toString() << endl;

    تاريخ در كنسول چاپ مي شود. ما از متد toString() براي تبديل ديتا به رشته استفاده مي كنيم.
    QTime tm2;
    tm2.setHMS(13, 52, 45, 155);

    يك شي خالي QTime ايجاد شده است. ما اين شي را از تاريخ با استفاده از متد setHMS(). كه پارامترهاي آن به ترتيب ساعت ، دقيقه ، ثانيه و ميلي ثانيه مي باشند.
    out << "The time is " << tm2.toString("hh:mm:ss.zzz") << endl;

    ما شي QTime را در كنسول چاپ مي كنيم.ما از فرمت تعيين شده كه داراي ميلي پثانيه نيز مي باشد استفاده مي كنيم، كه به طور پيش فرض حذف شده است.
    Output
    $ ./simple 
    The date is Tue Apr 12 2011
    The date is Thu Mar 3 2011
    The time is 17:30:12.055
    The time is 13:52:45.155
    تاريخ و ساعت رايج
    در مثال زير ما تاريخ و زمان فعلي را در كنسول چاپ مي كنيم.
    curdatetime.cpp
    #include <QTextStream>
    #include <QTime>
    #include <QDate>

    int main()
    {
    QTextStream out(stdout);

    QDate cd = QDate::currentDate();
    QTime ct = QTime::currentTime();

    out << "Current date is " << cd.toString() << endl;
    out << "Current time is " << ct.toString() << endl;
    }
    مراقب باشيد كه اين فايل بايد با نام time.cpp فراخوانده شود.
    QDate cd = QDate::currentDate();

    تابع استاتيك QDate::currentDate() تاريخ در جريان را باز مي گرداند.
    QTime ct = QTime::currentTime();

    تابع استاتيك QTime::currentTime() زمان جاري را باز مي گرداند.
    out << "Current date is " << cd.toString() << endl;
    out << "Current time is " << ct.toString() << endl;

    ما از متد toString() براي تبديل شي هاي تاريخ و زمان به رشته استفاده مي كنيم.
    Output
    $ ./curdatetime 
    Current date is Tue Sep 18 2012
    Current time is 19:43:37
    مقايسه تاريخ ها
    با استفاده از عملگرها مي توان تاريخ را مقايسه كرد. ما مي توانيم موقعيت آنها را در تقويم بسنجيم.
    comparedates.cpp
    #include <QTextStream>
    #include <QDate>

    int main()
    {
    QTextStream out(stdout);

    QDate dt1(2012, 4, 5);
    QDate dt2(2011, 4, 5);

    if (dt1 < dt2) {
    out << dt1.toString() << " comes before "
    << dt2.toString() << endl;
    } else {
    out << dt1.toString() << " comes after "
    << dt2.toString() << endl;
    }
    }
    براي مثال مقايسه دو تاريخ:
    QDate dt1(2012, 4, 5);
    QDate dt2(2011, 4, 5);

    ما دو تاريخ متفاوت داريم.
    if (dt1 < dt2) {
    out << dt1.toString() << " comes before "
    << dt2.toString() << endl;
    } else {
    out << dt1.toString() << " comes after "
    << dt2.toString() << endl;
    }

    ما تاريخ ها با استفاده از عملگر كوچكتر (>) مقايسه كرده و تعيين مي كنيم كدام يك زودتر در تقويم قرار گرفته اند.
    Output
    $ ./comparedates 
    Thu Apr 5 2012 comes after Tue Apr 5 2011
    عملگرهاي مقايسه به راحتي براي شي هاي QTime و QDateTime نيز استفاده مي شوند.


    تعيين سال كبيسه
    توضيح اضافه : سال هاي كه اسفند در آن 30 روزه است. يعني تعداد روزهاي سال به جاي 365 روز 366 روز مي باشد را سال كبيسه مي گويند.
    اما در تقويم ميلادي اين امر چگونه مي شود. بنابراين ما مي خواهيم يك تقويم همگام شده با فصول سال داشته باشيم ما يك روز به فوريه هر 4 سال اضافه مي كنيم.(استثنا وجود دارد.) در تقويم گريگوري(ميلادي : وابسته به كليساي گريگوريان ارمنستان) ماه فوريه 29 روزه مي شود كه معمولا 28 روزه مي باشد.و سال 366 روز طول مي كشد در صورتي كه معمولا 365 روز مي باشد. متد استاتيك QDate::isLeapYear() تعيين مي كند كه آيا امسال سال كبيسه هست يا خير.
    leapyear.cpp
    #include <QTextStream>
    #include <QDate>

    int main()
    {
    QTextStream out(stdout);


    if (QDate::isLeapYear(2010)) {
    out << "2010 is a leap year" << endl;
    } else {
    out << "2010 is not a leap year" << endl;
    }

    if (QDate::isLeapYear(2011)) {
    out << "2011 is a leap year" << endl;
    } else {
    out << "2011 is not a leap year" << endl;
    }

    if (QDate::isLeapYear(2012)) {
    out << "2012 is a leap year" << endl;
    } else {
    out << "2012 is not a leap year" << endl;
    }
    }
    ما سه سال را چك مي كنيم و در خروجي چاپ مي كنيم كه آيا سال موردنظر كبيسه هست يا خير.
    if (QDate::isLeapYear(2010)) {
    out << "2010 is a leap year" << endl;
    } else {
    out << "2010 is not a leap year" << endl;
    }

    در اينجا ما سال 2010 را چك مي كنيم. كه بر اين اساس كه آيا سال كبيسه مي باشد يا خير و برهمان اساس در خروجي مقدار بولين True يا False را چاپ مي كنيم.
    Output
    $ ./leapyear 
    2010 is not a leap year
    2011 is not a leap year
    2012 is a leap year
    فرمت هاي از پيش تعريف شده تاريخ

    كيوت 4 برخي فرمت هاي ساخته شده را دارد.متد toString() از شي QDate فرمت تاريخ را به عنوان پارامتر مي دهد. فرمت پيشفرض استفاده شده در كيوت 4 Qt::TextDate مي باشد.
    dateformats.cpp
    #include <QTextStream>
    #include <QDate>

    int main(void)
    {
    QTextStream out(stdout);

    QDate cd = QDate::currentDate();

    out << "Today is " << cd.toString(Qt::TextDate) << endl;
    out << "Today is " << cd.toString(Qt::ISODate) << endl;
    out << "Today is " << cd.toString(Qt::SystemLocaleShortDate) << endl;
    out << "Today is " << cd.toString(Qt::SystemLocaleLongDate) << endl;
    out << "Today is " << cd.toString(Qt::DefaultLocaleShortDate) << endl;
    out << "Today is " << cd.toString(Qt::DefaultLocaleLongDate) << endl;
    out << "Today is " << cd.toString(Qt::SystemLocaleDate) << endl;
    out << "Today is " << cd.toString(Qt::LocaleDate) << endl;
    }
    در اين مثال، ما 8 فرمت مختلف تاريخ را از تايخ فعلي نمايش مي دهيم.
    out << "Today is " << cd.toString(Qt::ISODate) << endl;

    در اينجا ما تاريخ جاري در فرمت Qt::ISODate نمايش مي دهيم، كه استاندارد بين المللي براي نمايش تاريخ مي باشد.
    Output
    $ ./dateformats 
    Today is Wed Sep 19 2012
    Today is 2012-09-19
    Today is 9/19/12
    Today is Wednesday, September 19, 2012
    Today is 9/19/12
    Today is Wednesday, September 19, 2012
    Today is 9/19/12
    Today is 9/19/12

    فرمت هاي سفارشي تاريخ
    تاريخ را مي توان در فرمت هاي مختلف نمايش داد. در كيوت 4 ما مي توانيم فرمت تاريخ سفارشي ايجاد كنيم. نسخه هاي ديگر متد toString() فرمت هاي رشته اي را مي دهد كه ما مي توانيم از انواع اين فرمت هاي تعيين شده استفاده كنيم. براي مثال d براي روز تعيين شده است كه مقدار عددي دريافت مي كند بدون داشتن صفر قبل از عدد. dd مانند d با اين تفاوت كه صفر قبل از عدد نيز مي توان قرار داد. جدول زير ليستي از فرمت هاي تاريخ در دسترس همراه با توضيح را نشان مي دهد.
    List.PNG
    جدول : فرمت تاريخ تعيين شده
    customdateformats.cpp
    #include <QTextStream>
    #include <QDate>

    int main(void)
    {
    QTextStream out(stdout);

    QDate cd = QDate::currentDate();

    out << "Today is " << cd.toString("yyyy-MM-dd") << endl;
    out << "Today is " << cd.toString("yy/M/dd") << endl;
    out << "Today is " << cd.toString("d.M.yyyy") << endl;
    out << "Today is " << cd.toString("d-MMMM-yyyy") << endl;
    }
    ما چهار فرمت سفارشي داريم.
    out << "Today is " << cd.toString("yyyy-MM-dd") << endl;

    اين يك فرمت بين المللي مي باشد. اين بخش با كاراكتر خط تيره جدا شده است. yyyy چهار رقم براي سال دارد. MM به عنوان ماه كه داراي صفر پيشرو مي باشد(01 تا 12). dd به عنوان روز كه داراي صفر پيشرو مي باشد (01 تا 31).
    out << "Today is " << cd.toString("yy/M/dd") << endl;

    يكي از فرمت هاي مشترك ديگر مي باشد .اين بخش با كاراكتر اسلش (/) جدا شده است. M براي ماه تعيين شده است بدون صفر پيشرو از 01 تا 31 .
    out << "Today is " << cd.toString("d.M.yyyy") << endl;

    اين فرمت در اسلواكي استفاده شده است. اين قسمت توسط كاراكتر دات جدا شده است. روز و ماه آن بدون صفر پيشرو مي باشند. اول روز و سپس ماه و در آخر سال مي باشد.
    Output
    $ ./customdateformats 
    Today is 2012-09-19
    Today is 12/9/19
    Today is 19.9.2012
    Today is 19-September-2012
    فرمت هاي تعيين شده زمان
    زمان برخي فرمت هاي از پيش تعيين شده را دارا مي باشد.فرمت استاندارد آن با فرمت استاندارد تاريخ يكسان مي باشد. فرمت پيش فرض استفاده شده در كيوت4 Qt::TextDate مي باشد.
    timeformats.cpp
    #include <QTextStream>
    #include <QTime>

    int main(void)
    {
    QTextStream out(stdout);

    QTime ct = QTime::currentTime();

    out << "The time is " << ct.toString(Qt::TextDate) << endl;
    out << "The time is " << ct.toString(Qt::ISODate) << endl;
    out << "The time is " << ct.toString(Qt::SystemLocaleShortDate) << endl;
    out << "The time is " << ct.toString(Qt::SystemLocaleLongDate) << endl;
    out << "The time is " << ct.toString(Qt::DefaultLocaleShortDate) << endl;
    out << "The time is " << ct.toString(Qt::DefaultLocaleLongDate) << endl;
    out << "The time is " << ct.toString(Qt::SystemLocaleDate) << endl;
    out << "The time is " << ct.toString(Qt::LocaleDate) << endl;
    }
    در اين مثال ما 8 فرمت مختلف براي زمان فعلي را نشان مي دهيم.
    out << "The time is " << ct.toString(Qt::ISODate) << endl;

    در اينجا ما زمان فعلي را در فرمت Qt::ISODate چاپ مي كنيم، كه يك استاندارد بين المللي براي نمايش زمان مي باشد.
    Output
    $ ./timeformats 
    The time is 08:12:52
    The time is 08:12:52
    The time is 8:12 AM
    The time is 8:12:52 AM CEST
    The time is 8:12 AM
    The time is 8:12:52 AM CEST
    The time is 8:12 AM
    The time is 8:12 AM
    سفارشي كردن فرمت زمان
    ما مي توانيم فرمت هاي اضافي براي زمان ايجاد كنيم. ما يك فرمت زمان سفارشي كه به عنوان فرمت زمان پيش فرض استفاده شود مي سازيم. جدول زير ليستي از فرمت هاي در دسترس + توضيحات آن ارائه مي دهد.
    123.JPG
    جدول : فرمت هاي تعيين شده زمان
    آخرین ویرایش به وسیله complexcoding : پنج شنبه 22 فروردین 1392 در 21:38 عصر

  8. #8
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    customtimeformats.cpp
    #include <QTextStream>
    #include <QTime>

    int main(void)
    {
    QTextStream out(stdout);

    QTime ct = QTime::currentTime();

    out << "The time is " << ct.toString("hh:mm:ss.zzz") << endl;
    out << "The time is " << ct.toString("h:m:s a") << endl;
    out << "The time is " << ct.toString("H:m:s A") << endl;
    out << "The time is " << ct.toString("h:m AP") << endl;

    out << "The version of Qt4 is " << qVersion() << endl;
    }

    ما چهار فرمت سفارشي زمان داريم.
    out << "The time is " << ct.toString("hh:mm:ss.zzz") << endl;

    در اين فرمت ما ساعت ، زمان و ثانيه را با صفر پيشرو داريم. ما همچنين ميلي ثانيه را با صفر پيشرو اضافه مي كنيم.
    out << "The time is " << ct.toString("h:m:s a") << endl;

    اين فرمت از زمان ساعت و دقيقه و ثانيه را بدون صفر پيشرو استفاده مي كند و با am/pm اينكه در چه دوره اي از روز قرار داريم را مشخص مي كند.
    Output
    $ ./customtimeformats 
    The time is 08:45:19.295
    The time is 8:45:19 am
    The time is 8:45:19 AM
    The time is 8:45 AM
    بازيابي هفته
    متد dayOfWeek() يك عدد را كه نشانگر روز هفته است برمي گرداد اين اعداد از يك يعني دوشنبه و هفت يعني يكشنبه مشخص شده اند.
    weekday.cpp
    #include <QTextStream>
    #include <QDate>

    int main()
    {
    QTextStream out(stdout);

    QDate cd = QDate::currentDate();
    int wd = cd.dayOfWeek();

    out << "Today is " << QDate::shortDayName(wd) << endl;
    out << "Today is " << QDate::longDayName(wd) << endl;
    }
    در اين مثال ما نام هاي كوتاه و بلند از هفته جاري را چاپ مي كنيم.
    QDate cd = QDate::currentDate();

    ما تاريخ جاري را دريافت مي كنيم.
    int wd = cd.dayOfWeek();

    از تاريخ جاري ما يك روز از هفته دريافت مي كنيم.
    out << "Today is " << QDate::shortDayName(wd) << endl;

    با متد استاتيك QDate::shortDayName() ما يك نام كوتاه از هفته دريافت مي كنيم.
    out << "Today is " << QDate::longDayName(wd) << endl;  

    استفاده از متد استاتيك QDate::longDayName() ما يك نام طولاني از هفته دريافت مي كنيم.
    Output
    $ ./weekday 
    Today is Wed
    Today is Wednesday

    تعداد روزها
    ما مي توانيم تعداد روزها را در ماه هاي خاصي توسط متد daysINMonth() و همچنين تعداد روزها را در سال با استفاده از متد daysInYear() حساب كنيم.
    nofdays.cpp
    #include <QTextStream>
    #include <QDate>

    int main()
    {
    QTextStream out(stdout);

    QDate dt1(2012, 9, 18);
    QDate dt2(2012, 2, 11);
    QDate dt3(2012, 5, 1);
    QDate dt4(2012, 12, 11);
    QDate dt5(2012, 1, 21);

    out << "There are " << dt1.daysInMonth() << " days in "
    << QDate::longMonthName(dt1.month()) << endl;
    out << "There are " << dt2.daysInMonth() << " days in "
    << QDate::longMonthName(dt2.month()) << endl;
    out << "There are " << dt3.daysInMonth() << " days in "
    << QDate::longMonthName(dt3.month()) << endl;
    out << "There are " << dt4.daysInMonth() << " days in "
    << QDate::longMonthName(dt4.month()) << endl;
    out << "There are " << dt5.daysInMonth() << " days in "
    << QDate::longMonthName(dt5.month()) << endl;

    out << "There are " << dt1.daysInYear() << " days in year "
    << QString::number(dt1.year()) << endl;
    }

    پنج شي تاريخ ايجاد شده است. ما تعداد روزها در اين ماه و در يك سال خاص محابه مي كنيم.
    QDate dt1(2012, 9, 18);
    QDate dt2(2012, 2, 11);
    QDate dt3(2012, 5, 1);
    QDate dt4(2012, 12, 11);
    QDate dt5(2012, 1, 21);

    پنج شي QDate ايجاد شده است. هر يك از آنها نشان دهنده تاريخ هاي مختلف مي باشند.
    out << "There are " << dt1.daysInMonth() << " days in " 
    << months.at(dt1.month()-1) << endl;

    ما از متد daysINMonth() براي گرفتن تعداد روزها در يك تاريخ خاص استفاده مي كنيم .
    out << "There are " << dt1.daysInYear() << " days in year " 
    << QString::number(dt1.year()) << endl;

    و اينجا، ما تعداد روزها در سال را با استفاده از متد dayInYear() براي شي تاريخ دريافت مي كنيم.
    Output
    $ ./nofdays 
    There are 30 days in September
    There are 29 days in February
    There are 31 days in May
    There are 31 days in December
    There are 31 days in January
    There are 366 days in year 2012


    چك كردن اعتبار يك تاريخ
    متد isValid() چك مي كند كه آيا يك تاريخ معتبر هست يا نه.
    isvalid.cpp
    #include <QTextStream>
    #include <QDate>

    int main(void)
    {
    QTextStream out(stdout);

    QDate dt1(2012, 5, 11);
    QDate dt2(2012, 8, 1);
    QDate dt3(2012, 2, 30);

    if (dt1.isValid()) {
    out << "The first date is valid" << endl;
    } else {
    out << "The first date is not valid" << endl;
    }

    if (dt2.isValid()) {
    out << "The second date is valid" << endl;
    } else {
    out << "The second date is not valid" << endl;
    }

    if (dt3.isValid()) {
    out << "The third date is valid" << endl;
    } else {
    out << "The third date is not valid" << endl;
    }
    }

    در اين مثال ما اعتبار سه روز را چك مي كنيم.
    QDate dt1(2012, 5, 11);  
    QDate dt2(2012, 8, 1);
    QDate dt3(2012, 2, 30);


    دو روز اول معتبر هستند. 1/3 آن نامعتبر مي باشد يعني روز سوم. فوريه 28 يا 29 روز دارد.
    if (dt1.isValid()) {
    out << "The first date is valid" << endl;
    } else {
    out << "The first date is not valid" << endl;
    }

    بسته به نتيجه متد isValid() ما يك پيغام درباره معتبر يا نامعتبر بودن تاريخ در كنوسل چاپ مي كنيم.
    Output
    $ ./isvalid 
    The first date is valid
    The second date is valid
    The third date is not valid

    روزهاي باقي مانده، روزهاي گذشته
    ما مي توانيم به راحتي تعداد روزهاي يك تاريخ را از يك تاريخ خاص محاسبه كنيم. ما از متد addDays() استفاده مي كنيم.متد daysTo() تعداد روزهاي باقي مانده از يك تاريخ مشخص را بازمي گرداند.
    daystofrom.cpp
    #include <QTextStream>
    #include <QDate>

    int main(void)
    {
    QTextStream out(stdout);

    QDate dt(2012, 5, 11);
    QDate nd = dt.addDays(55);

    QDate xmas(2012, 12, 24);

    out << "55 days from " << dt.toString() << " is "
    << nd.toString() << endl;
    out << "There are " << QDate::currentDate().daysTo(xmas)
    << " days till Christmas" << endl;
    }
    ما 55 روز بعد از ماه مي 11،2012 را دريافت مي كنيم. ما همچنين تعداد روزهاي باقي ماده تا كريسمس را محاسبه مي كنيم.
    QDate dt(2012, 5, 11);  
    QDate nd = dt.addDays(55);

    متد addDays() يك QDate باز مي گرداند كه 55 روز پس از مي 11،2012 مي باشد.
    QDate xmas(2012, 12, 24);
    ...
    out << "There are " << QDate::currentDate().daysTo(xmas)
    << " days till Christmas" << endl;

    ما از متد daysTo() براي محاسبه تعداد روزهاي باقيمانده تا كريسمس استفاده مي كنيم.
    Output
    $ ./daystofrom  55 days from Fri May 11 2012 is Thu Jul 5 2012 There are 96 till Christmas

    كلاس QDateTime
    شي QDateTime شامل تقويم و ساعت مي باشد.اين تركيبي از كلاس QTime و QDate مي باشد. آن تعداد زيادي متدهاي مشابه و استفاده شده يكسان در دو كلاس دارد.
    datetime.cpp
    #include <QTextStream>
    #include <QDateTime>

    int main()
    {
    QTextStream out(stdout);

    QDateTime cdt = QDateTime::currentDateTime();

    out << "The current datetime is " << cdt.toString() << endl;
    out << "The current date is " << cdt.date().toString() << endl;
    out << "The current time is " << cdt.time().toString() << endl;
    }

    مثال بازيابي مجدد DateTime فعلي.
    out << "The current datetime is " << cdt.toString() << endl;

    اين خط از كد ديتاتايم جاري را در خروجي چاپ مي كند.
    out << "The current date is " << cdt.date().toString() << endl;

    اين خط بخش تاريخ را از شي ديتاتايم با استفاده از متد date() بازيابي مي كند.
    Output
    $ ./datetime 
    The current datetime is Thu Sep 20 09:51:22 2012
    The current date is Thu Sep 20 2012
    The current time is 09:51:22


    زمان UTC
    سياره ما كروي مي باشد. آن دايره وار به دور محورش مي چرخد. زمين به سمت شرق مي چرخد.بنابراين خورشيددر زمان هاي مختلف و در مكان هاي مختلف طلوع مي كند. زمين هر 24 ساعت يكبار به دور خود مي چرخد. از اين رو جهان به 24 منطقه زماني تقسيم شده است. در هر منطقه زماني، زمان مختلفي وجود دارد. زمان محلي اينجا را براي استفاده بيشتر از روشنايي روز بيشتر تغيير مي دهند.
    نياز به زماني جهاني وجود دارد. يك زمان جهاني براي كمك كردن به رديابي زمان و استفاده بيشتر از روشنايي روز در همه جاي دنيا.UTC (Universal Coordinated time) يك گزينه اصلي براي زمان استاندارد مي باشد. UTC تنظيم شده است براي حمل و نقل هوايي ، پاكسازي ها ، كنترل ترافيك ، پيش بيني وضع هوا و برنامه پروازها و خطوط حمل و نقل.برخلاف زمان محلي UTC تغييرناپذير است و بر اساس فصول تغيير نمي كند.
    utclocal.cpp
    #include <QTextStream>
    #include <QDateTime>

    int main(void)
    {
    QTextStream out(stdout);

    QDateTime cdt = QDateTime::currentDateTime();

    out << "Universal datetime" << cdt.toUTC().toString() << endl;
    out << "Local datetime" << cdt.toLocalTime().toString() << endl;
    }

    در اين مثال ما ديتاتايم جاري را محاسبه مي كنيم. ما ديتاتيم را با UTC ديتاتايم و ديتاتايم محلي نمايش مي دهيم.
    out << "Universal datetime" << cdt.toUTC().toString() << endl;

    متد toUTC() براي دريافت ديتاتايم يو تي سي استفاده شده است.
    out << "Local datetime" << cdt.toLocalTime().toString() << endl;

    toLocalTime() براي دريافت ساعت و زمان محلي استفاده شده است.
    Output
    $ ./localutc 
    Universal datetime: Thu Sep 20 09:20:34 2012
    Local datetime: Thu Sep 20 11:20:34 2012

    اين مثال در منطقه زماني UTC+1 اجرا شد. بعلاوه اضافه شدن يك ساعت براي ذخيره زمان روشنايي روز.

    آغاز دوره يونيكس

    مبدا تاريخ آن لحظه از شروع زمان تاريخ خاص مي باشد.براي مثال كشورهاي مسيحي غربي روز اول تاريخشون از آنجا شروع مي شود كه حضرت مسيح متولد مي شود(بر اين باور هستند كه آن روز حضرت مسيح متولد شده است). مثال ديگر تقويم جمهوري فرانسه بود كه به مدت دوازده سال مورد استفاده قرار گرفت.اين دوره به عصر جمهوري شهرت پيدا كرد كه اعلام آن از تاريخ سپتامبر 22،1792 بود اولين روز جمهوري خواهان نامگذاري شد و سلطنت را ساقط شده اعلام كردند. كامپيوترها اين دوره را دارند.يك از محبوب ترين زمان ها، زمان يونيكس مي باشد. عصر يونيكس زمان 00:00:00 يو تي سي در 1 ژانويه 1970 مي باشد.(يا 1970-01-01T00:00:00Z ISO 8601) . اين تاريخ و زمان در كامپيوتر مطابق تعداد ثانيه ها يا تيك هاي ساعت كه بعد از دوره مشخص شده براي كامپيوترها و پلت فرم ها تعريف شده اند، مي باشد.
    $ date +%s
    1348171197

    فرمان تاريخ يونيكس را مي توان براي به دست آوردن زمان يونيكس مورد استفاده قرار داد. در اين لحظه خاص 1348171197 ثانيه از عصر يونيكس گذشته است.
    #include <QTextStream>
    #include <QDateTime>
    #include <ctime>

    int main()
    {
    QTextStream out(stdout);

    time_t t = time(0);
    out << t << endl;

    QDateTime dt;
    dt.setTime_t(t);
    out << dt.toString() << endl;

    QDateTime cd = QDateTime::currentDateTime();
    out << cd.toTime_t() << endl;
    }

    در اين مثال، ما از دو تابع كيوت 4 براي دريافت زمان يونيكس و تبديل آن به فرم قابل خواندني براي انسان استفاده مي كنيم.
    #include <ctime>

    ما فايل سرآيند شامل زمان استاندارد ++C را استفاده مي كنيم.
    time_t t = time(0);  
    out << t << endl;

    با فرمان استاندارد time() سي پلاس پلاس، ما زمان يونيكس را دريافت مي كنيم.
    QDateTime dt;
    dt.setTime_t(t);
    out << dt.toString() << endl;

    متد setTime() براي تبديل زمان يونيكس به ديتاتايم استفاده شده است، كه فرمي قابل خواندني براي انسان مي باشد.
    QDateTime cd = QDateTime::currentDateTime();
    out << cd.toTime_t() << endl;

    متد toTime_t() كيوت 4 نيز همچنين براي دريافت زمان يونيكس استفاده مي شود.
    Output
    $ ./unixepoch 
    1348171451
    Thu Sep 20 22:04:11 2012
    1348171451

    در اين فصل، ما با زمان و تاريخ كار كرديم.

    پايان بخش Date & Time
    آخرین ویرایش به وسیله complexcoding : چهارشنبه 14 فروردین 1392 در 23:38 عصر

  9. #9
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    برنامه نويسي اوليه در كيوت 4

    در اين قسمت از آموزش برنامه نويسي كيوت 4 ما يك برنامه ابتدايي يا اوليه درست مي كنيم. در اين برنامه يك آيكون برنامه كاربردي ، يك tooltip و مكان نماهاي مختلف موس را نمايش مي دهيم. ما در مركز فرم روي صفحه نمايش به معرفي مكانيزم سيگنال و اسلات مي پردازيم.

    مثال ساده

    ما يك مثال ساده شروع مي كنيم.
    #include <QApplication>
    #include <QWidget>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    QWidget window;

    window.resize(250, 150);
    window.setWindowTitle("Simple example");
    window.show();

    return app.exec();
    }

    ما پنجره ي پايه را روي صفحه نمايش نشان مي دهيم.
    #include <QApplication>
    #include <QWidget
    >
    ما فايل هاي سرآيند ضروري را اضافه مي كنيم.
    QApplication app(argc, argv);

    اين يك شي برنامه كاربردي است. هر برنامه نوشته شده در كيوت بايد اين شي را داشته باشد البته به استثناي برنامه هاي كنسول.
    QWidget window;

    اين ويدجت ما مي باشد.
    window.resize(250, 150);
    window.setWindowTitle("Simple example");
    window.show();

    در اينجا ما ويدجت مان را تغيير سايز مي دهيم. يك سرعنوان براي پنجره مان انتخاب مي كنيم.در اين مورد ، QWidget پنجره مادر ما يا پنجره اصلي مي باشد. و در پايان يك ويدجت برروي صفحه نمايش، نمايش مي دهيم.
    return app.exec();

    ما سيكل اصلي يك برنامه كاربردي را شروع مي كنيم

    تصوير : مثال ساده

    پنجره مركزي
    اگر ما نمي توانيم وضع پنجره خود را تعيين كنيم ويندوز اين كار را براي ما انجام مي دهد. در مثال بعد ،‌ ما پنجره را در مركز قرار مي دهيم.
    #include <QApplication>
    #include <QDesktopWidget>
    #include <QWidget>

    int main(int argc, char *argv[])
    {

    int WIDTH = 250;
    int HEIGHT = 150;

    int screenWidth;
    int screenHeight;

    int x, y;

    QApplication app(argc, argv);

    QWidget window;

    QDesktopWidget *desktop = QApplication::desktop();

    screenWidth = desktop->width();
    screenHeight = desktop->height();

    x = (screenWidth - WIDTH) / 2;
    y = (screenHeight - HEIGHT) / 2;

    window.resize(WIDTH, HEIGHT);
    window.move( x, y );
    window.setWindowTitle("Center");
    window.show();

    return app.exec();
    }

    به طور فراوان سايزهاي مختلف مانيتور و داده هاي كوچك يا بزرگ وجود دارد.در تنظيم كردن يك فرم در مركز پنجره ما بايد عرض و ارتفاع ميزكار را تعيين كنيم.براي اين كار ما از كلاس QDesktopWidget استفاده مي كنيم.
    QDesktopWidget *desktop = QApplication::desktop();

    screenWidth = desktop->width();
    screenHeight = desktop->height();

    در اينجا ما عرض و طول صفحه نمايش را تعيين مي كنيم.
    x = (screenWidth - WIDTH) / 2;
    y = (screenHeight - HEIGHT) / 2
    ;
    در اينجا ما نقطه كوچك سمت چپ بالاي پنجره را محاسبه مي كنيم.
    window.resize(WIDTH, HEIGHT);
    window.move( x, y );

    ما ويدجت را تعيين سايز مي كنيم و به موقعيت محاسبه شده انتقال مي دهيم. توجه كنيد كه ما بايد در ابتدا سايز ويدجت را تعيين كنيم و سپس آن را انتقال دهيم.

    tooltip
    يك تولتيپ يك توضيح خيلي جزئي درباره ابزارها و وسيله ي مورد استفاده مي باشد وقتي با موس روي ابزاري قرار مي گيريم يك توضيح كوچك ظاهر مي شود كه به آن تولتيپ مي گويند. در مثال زير چگونگي ايجاد tooltip در كيوت4 را بررسي مي كنيم.
    #include <QApplication>
    #include <QWidget>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    QWidget window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("ToolTip");
    window.setToolTip("QWidget");
    window.show();

    return app.exec();
    }

    همه ما با متد setToolTip()به آساني يك toolTip ايجاد مي كنيم.
    window.setWindowTitle("ToolTip");

    ما يك toolTip براي ويدجت QWidget تنظيم مي كنيم.

    تصوير: يك toolTip

    آيكون برنامه كاربردي
    در مثال بعد ، ما يك برنامه كاربردي را نمايش مي دهيم. اغلب مديريت پنجره ها يك آيكون در گوشه سمت چپ نوار عنوان و همچنين نوار وظايف نشان مي دهند.
    #include <QApplication>
    #include <QWidget>
    #include <QIcon>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    QWidget window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("icon");
    window.setWindowIcon(QIcon("web.png"));
    window.show();

    return app.exec();
    }

    يك آيكون در گوشه سمت چپ پنجره نشان داده مي شود.
    window.setWindowIcon(QIcon("web.png"));

    براي نمايش يك آيكون ، ما از متد setWindowIcon() و از كلاس QIcon استفاده مي كنيم.اين آيكون، فايل كوچك PNG مي باشد كه كه در مسير دايركتوري كه با آن كار مي كنيم قرار گرفته است.

    تصوير: آيكون

    مكان نما
    مكان نما يك آيكون كوچك مي باشد كه موقعيت نقطه موس را نمايش مي دهد. در مثال بعد، ما مكان نماهاي مختلفي را كه در برنامه مي توانيم استفاده كنيم نشان مي دهيم.
    #include <QApplication>
    #include <QWidget>
    #include <QFrame>
    #include <QGridLayout>


    class Cursors : public QWidget
    {
    public:
    Cursors(QWidget *parent = 0);
    };


    Cursors::Cursors(QWidget *parent)
    : QWidget(parent)
    {
    QFrame *frame1 = new QFrame(this);
    frame1->setFrameStyle(QFrame::Box);
    frame1->setCursor(Qt::SizeAllCursor);

    QFrame *frame2 = new QFrame(this);
    frame2->setFrameStyle(QFrame::Box);
    frame2->setCursor(Qt::WaitCursor);

    QFrame *frame3 = new QFrame(this);
    frame3->setFrameStyle(QFrame::Box);
    frame3->setCursor(Qt::PointingHandCursor);

    QGridLayout *grid = new QGridLayout(this);
    grid->addWidget(frame1, 0, 0);
    grid->addWidget(frame2, 0, 1);
    grid->addWidget(frame3, 0, 2);

    setLayout(grid);
    }


    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Cursors window;

    window.resize(350, 150);
    window.move(300, 300);
    window.setWindowTitle("cursors");
    window.show();

    return app.exec();
    }

    در اين مثال ما از سه QFrames استفاده مي كنيم.هر يك از اين Frameها مكان نماهاي تعريف شده مختلفي دارند.
    QFrame *frame1 = new QFrame(this);
    frame1->setFrameStyle(QFrame::Box);
    frame1->setCursor(Qt::SizeAllCursor);

    يك ويدجت Frame ايجاد مي كنيم. ما نوع مكان نما و استايل Frame را تنظيم مي كنيم.
    [CPP]
    QGridLayout *grid = new QGridLayout(this); grid->addWidget(frame1, 0, 0); grid->addWidget(frame2, 0, 1); grid->addWidget(frame3, 0, 2); setLayout(grid);[/CPP
    ]
    ما درباره فرم ها در بخش طرح ها بيشتر توضيح خواهيم داد.

    A Button
    در كد مثال بعد ، ما يك پوش باتن بر روي پنجره صفحه نمايش خواهيم داد. كه توسط كليك بر روي اين دكمه برنامه كاربردي مربوط به آن بسته شود.
    #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();
    }

    در كد اين مثال ما از مفهوم سيگنال و اسلات براي اولين بار استفاده مي كنيم
    QPushButton *quit = new QPushButton("Quit", this);
    quit->setGeometry(50, 40, 75, 30);

    ما يك QPushButton جديد ايجاد مي كنيم. ما بصورت دستي موقعيت را x:50 px و y:40 px و سايز را width:75 px و height:30 px تعيين مي كنيم.
    connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));

    زماني كه ما روي دكمه كليك مي كنيم. سيگنال clicked() ايجاد شده است و اين اسلات يك متد است كه سيگنال واكنش نسان مي دهد. در اين مورد شي برنامه كاربردي ما اسلات quit() مي باشد. qApp يك اشاره گر سراسري به شي برنامه مي باشدكه در فايل سرآيند QApplication تعريف شده است.

    تصوير: يك دكمه

    برقراري ارتباط
    ما در اين بخش بحث برقراري ارتباط بين ويدجت ها را به پايان رسانديم.اين كد را به سه فايل تقسيم مي كنيم. بنابراين به دفعات تنها يك فايل استفاده مي كنيم كه اين تنها در مثال هاي كوچك شدني است. حالا ما سه فايل سورس داريم.
    communicate.h
    #ifndef COMMUNICATE_H
    #define COMMUNICATE_H

    #include <QWidget>
    #include <QApplication>
    #include <QPushButton>
    #include <QLabel>

    class Communicate : public QWidget
    {
    Q_OBJECT

    public:
    Communicate(QWidget *parent = 0);


    private slots:
    void OnPlus();
    void OnMinus();

    private:
    QLabel *label;

    };

    #endif

    اين فايل سرآيند اين مثال مي باشد.در اين فايل ، ما دو اسلات و يك ويدجت فرزند تعريف مي كنيم.
    communicate.cpp
    #include "communicate.h"

    Communicate::Communicate(QWidget *parent)
    : QWidget(parent)
    {
    QPushButton *plus = new QPushButton("+", this);
    plus->setGeometry(50, 40, 75, 30);

    QPushButton *minus = new QPushButton("-", this);
    minus->setGeometry(50, 100, 75, 30);

    label = new QLabel("0", this);
    label->setGeometry(190, 80, 20, 30);

    connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
    connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus()));
    }

    void Communicate::OnPlus()
    {
    int val = label->text().toInt();
    val++;
    label->setText(QString::number(val));
    }

    void Communicate::OnMinus()
    {
    int val = label->text().toInt();
    val--;
    label->setText(QString::number(val));
    }

    ما دو پوش باتن و يك ويدجت ليبل تعريف مي كنيم تعداد نمايش داده شده در ليبل را توسط دكمه Button افزايش يا كاهش مي دهيم.
    connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
    connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus()));

    اينجا ما سيگنال Clicked() را به اسلات اتصال مي دهيم.
    void Communicate::OnPlus()
    {
    int val = label->text().toInt();
    val++;
    label->setText(QString::number(val));
    }

    در متد OnPlus() ما مقدار فعلي ليبل را تعيين مي كنيم. ويدجت ليبل يك مقدار رشته اي را نمايش مي دهد بنابراين ما بايد آن را به مقدار عددي تبديل كنيم.ما تعداد را افزايش مي دهيم و يك متن جديد براي ليبل قرار مي دهيم و مقدار عددي را ب رشته اي تبديل مي كنيم.
    main.cpp
    #include "communicate.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Communicate window;

    window.setWindowTitle("Communicate");
    window.show();

    return app.exec();
    }

    فايل اصلي كد مثال ما

    تصوير: برقراري ارتباط

    در اين فصل ما يك برنامه ايتدايي در كيوت 4 ايجاد كرديم.

    پايان بخش First Programs
    آخرین ویرایش به وسیله complexcoding : پنج شنبه 15 فروردین 1392 در 18:37 عصر

  10. #10
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    منوها و تولبارها در كيوت 4

    در اين بخش از آموزش برنامه نويسي كيوت 4 ، ما درباره ي منوها و تولبارها در برنامه هاي كيوت 4 صحبت خواهيم كرد. نوار منو يكي از پركاربردترين بخش ها در برنامه هاي GUI مي باشد. كه دستوراتي در گروه هاي مختلف مي باشند كه هر كدام در جاي خود قرار گرفته اند. نوا ابزار دسترسي سريع به بيشترين دستوراتي كه خيلي اوقات استفاده مي شود را فراهم مي كند.

    منوي ساده
    در مثال اول يك منوي ساده را مشخص مي كنيم.
    simplemenu.h
    #ifndef SIMPLEMENU_H
    #define SIMPLEMENU_H

    #include <QMainWindow>
    #include <QApplication>

    class SimpleMenu : public QMainWindow
    {
    public:
    SimpleMenu(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي مثال كد ما
    simplemenu.cpp
    #include "simplemenu.h"
    #include <QMenu>
    #include <QMenuBar>


    SimpleMenu::SimpleMenu(QWidget *parent)
    : QMainWindow(parent)
    {
    QAction *quit = new QAction("&Quit", this);

    QMenu *file;
    file = menuBar()->addMenu("&File");
    file->addAction(quit);

    connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
    }

    ما يك نوار منو داريم
    QAction *quit = new QAction("&Quit", this);

    يك اكشن و يك منو، بايد ما براي كار با منوها از ويدجت QMainWindow به ارث ببريم.
    QMenu *file;
    file = menuBar()->addMenu("&File");

    در اين خط كد ما يك QAction ايجاد مي كنيم. هر QMenu يك يا چندين شي اكشن توليد مي كند.
    file->addAction(quit);

    ما يك اكشن در منو درج مي كنيم.
    connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));

    زماني كه ما يك option را از منو انتخاب مي كنيم برنامه خاتمه مي يابد.
    main.cpp
    #include "simplemenu.h"


    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    SimpleMenu window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("Simple menu");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: منو ساده

    جدا كننده ها ،‌ شورتكات ها و آيكون ها
    در مثال زير ما با اضافه كردن آيكون ها و منوها وسايل اجراي برنامه مان را افزايش مي دهيم و از جداكننده ها و شورتكات ها استفاده مي كنيم.
    anothermenu.h
    #ifndef ANOTHERMENU_H
    #define ANOTHERMENU_H

    #include <QMainWindow>
    #include <QApplication>

    class AnotherMenu : public QMainWindow
    {
    public:
    AnotherMenu(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي مثال ما
    anothermenu.cpp
    #include "anothermenu.h"
    #include <QMenu>
    #include <QMenuBar>


    AnotherMenu::AnotherMenu(QWidget *parent)
    : QMainWindow(parent)
    {
    QPixmap newpix("new.png");
    QPixmap openpix("open.png");
    QPixmap quitpix("quit.png");

    QAction *newa = new QAction(newpix, "&New", this);
    QAction *open = new QAction(openpix, "&Open", this);
    QAction *quit = new QAction(quitpix, "&Quit", this);
    quit->setShortcut(tr("CTRL+Q"));

    QMenu *file;
    file = menuBar()->addMenu("&File");
    file->addAction(newa);
    file->addAction(open);
    file->addSeparator();
    file->addAction(quit);

    connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
    }

    در اين مثال ما يك منو همراه سه اكشن داريم . در واقع با انتخاب آن تنها كاري انجام مي دهد عمل خروج است.ما همچنين يك جداكننده و يك ميانبر Ctrl + Q ايجاد مي كنيم، كه برنامه را خاتمه مي دهد.
    QPixmap newpix("new.png");
    QPixmap openpix("open.png");
    QPixmap quitpix("quit.png");

    اين تصاوير در منوها استفاده شده اند. توجه كنيد كه برخي محيط هاي دسكتاپ توانايي نمايش عكس در من را ندارند.
    QAction *newa = new QAction(newpix, "&New", this);
    QAction *open = new QAction(openpix, "&Open", this);
    QAction *quit = new QAction(quitpix, "&Quit", this);

    در اين كد ما از سازنده QAction با Pixmap در آرگومان اول استفاده مي كنيم.
    quit->setShortcut(tr("CTRL+Q"));

    اينجا ما يك شورتكات از صفحه كليد ايجاد مي كنيم.كه توسط فشار آن اكشن كيوت كه باعث خاتمه برنامه مي شود ايجاد خواهد شد.
    file->addSeparator();

    ما يك جدا كننده ايجاد مي كنيم ، اين جدا كننده يك خط افقي مي باشد كه ما را در گروهبندي اكشن هاي منو كمك مي كند.
    main.cpp
    #include "anothermenu.h"


    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    AnotherMenu window;

    window.resize(350, 200);
    window.move(300, 300);
    window.setWindowTitle("Another menu");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: مثالي ديگر از منو

    منوهايي با قابليت تيك خوردن
    در مثال بعد ما يك منو چكباكسي را ايجاد مي كنيم.اين يك اكشن همراه يك chackable مي باشد كه امكان آشكار يا نهان كردن نوار وظيف را اضافه مي كند.
    checkable.h
    #ifndef CHECKABLE_H
    #define CHECKABLE_H

    #include <QMainWindow>
    #include <QApplication>

    class Checkable : public QMainWindow
    {
    Q_OBJECT

    public:
    Checkable(QWidget *parent = 0);

    private slots:
    void toggleStatusbar();

    private:
    QAction *viewst;

    };

    #endif

    فايل سرآيند مثال
    checkable.cpp
    #include "checkable.h"
    #include <QMenu>
    #include <QMenuBar>
    #include <QStatusBar>


    Checkable::Checkable(QWidget *parent)
    : QMainWindow(parent)
    {

    viewst = new QAction("&View statusbar", this);
    viewst->setCheckable(true);
    viewst->setChecked(true);

    QMenu *file;
    file = menuBar()->addMenu("&File");
    file->addAction(viewst);

    statusBar();

    connect(viewst, SIGNAL(triggered()), this,
    SLOT(toggleStatusbar()));

    }

    void Checkable::toggleStatusbar()
    {
    if (viewst->isChecked())
    statusBar()->show();
    else
    statusBar()->hide();
    }

    آيتم منوي chackable براي نمايان ساختن نوار وضعيت مي باشد.
    viewst = new QAction("&View statusbar", this);
    viewst->setCheckable(true);
    viewst->setChecked(true);

    درون متد toggleStatusbar() ما تعيين مي كنيم اگر آيتم منو چك خورده باشد نوار وضعيت مخفي باشد يا نمايش داده شود.
    if (viewst->isChecked())
    statusBar()->show();
    else
    statusBar()->hide();

    فايل اصلي

    تصوير: منو Chackable

    QToolbar
    QToolbar پنلي با قابليت حركت دادن مهيا مي كند. كه شامل كنترل هايي براي دسترسي سريع تر به اكشن هاي برنامه كاربردي مي باشد.
    toolbar.h
    #ifndef TOOLBAR_H
    #define TOOLBAR_H

    #include <QMainWindow>
    #include <QApplication>

    class Toolbar : public QMainWindow
    {
    Q_OBJECT

    public:
    Toolbar(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند مثال
    toolbar.cpp
    #include "toolbar.h"
    #include <QToolBar>
    #include <QIcon>
    #include <QAction>


    Toolbar::Toolbar(QWidget *parent)
    : QMainWindow(parent)
    {
    QPixmap newpix("new.png");
    QPixmap openpix("open.png");
    QPixmap quitpix("quit.png");

    QToolBar *toolbar = addToolBar("main toolbar");
    toolbar->addAction(QIcon(newpix), "New File");
    toolbar->addAction(QIcon(openpix), "Open File");
    toolbar->addSeparator();
    QAction *quit = toolbar->addAction(QIcon(quitpix),
    "Quit Application");

    connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
    }

    يك تولبار ايجاد مي كنيم كه از ويدجت QMainWindow به ارث مي بريم.
    QToolBar *toolbar = addToolBar("main toolbar");

    متد addToolBar() يك تولبار ايجاد كرده و از آن يك اشاره گر برمي گرداند.
    toolbar->addAction(QIcon(newpix), "New File");
    toolbar->addAction(QIcon(openpix), "Open File");
    toolbar->addSeparator();

    اينجا ما دو اكشن و يك جداكننده به تولبار اضافه مي كنيم.
    main.cpp
    #include "toolbar.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Toolbar window;

    window.resize(300, 200);
    window.move(300, 300);
    window.setWindowTitle("QToolBar");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QToolbar

    ساختمان نرم افزار
    در آخر اين بخش از آموزش برنامه نويسي ++C ما كالبد يك نرم افزار را ايجاد مي كنيم. اين مثال در واقع بر روي ويدجت QMainWindow ايجاد شده است.
    skeleton.h
    #ifndef SKELETON_H
    #define SKELETON_H

    #include <QMainWindow>
    #include <QApplication>

    class Skeleton : public QMainWindow
    {
    Q_OBJECT

    public:
    Skeleton(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي اين مثال
    skeleton.cpp
    #include "skeleton.h"
    #include <QToolBar>
    #include <QIcon>
    #include <QAction>
    #include <QMenu>
    #include <QMenuBar>
    #include <QStatusBar>
    #include <QTextEdit>


    Skeleton::Skeleton(QWidget *parent)
    : QMainWindow(parent)
    {
    QPixmap newpix("new.png");
    QPixmap openpix("open.png");
    QPixmap quitpix("quit.png");

    QAction *quit = new QAction("&Quit", this);

    QMenu *file;
    file = menuBar()->addMenu("&File");
    file->addAction(quit);

    connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));

    QToolBar *toolbar = addToolBar("main toolbar");
    toolbar->addAction(QIcon(newpix), "New File");
    toolbar->addAction(QIcon(openpix), "Open File");
    toolbar->addSeparator();

    QAction *quit2 = toolbar->addAction(QIcon(quitpix),
    "Quit Application");
    connect(quit2, SIGNAL(triggered()), qApp, SLOT(quit()));

    QTextEdit *edit = new QTextEdit(this);

    setCentralWidget(edit);

    statusBar()->showMessage("Ready");
    }

    اينجا ما يك منو و نوار ابزار و يك نوار وظيفه ايجاد مي كنيم.
    QTextEdit *edit = new QTextEdit(this);  
    setCentralWidget(edit);

    ما يك ويدجت QTextEdit در مكاني دقيقا در مركز ويدجت QMainWindow ايجاد مي كنيم.
    main.cpp
    #include "skeleton.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Skeleton window;

    window.resize(350, 250);
    window.move(300, 300);
    window.setWindowTitle("Application skeleton");
    window.show();

    return app.exec();
    }


    فايل اصلي

    تصوير: اسكلت برنامه

    در اين بخش از آموزش كيوت ما منوها و نوار ابزارها را پوشش داديم.

    پايان بخش Menus and Toolbars

  11. #11
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    مديريت طرح ها در كيوت 4
    در اين بخش از آموزش برنامه نويسي كيوت 4، ما درباره مديريت طرح و ويدجت ها صحبت خواهيم كرد.
    يك نمونه برنامه كاربردي شامل ويدجت هاي مختلفي مي باشد.آن ويدجت ها در layoutها قرار گرفته اند. يك برنامه نويس بايد لايه هاي برنامه كاربردي را مديريت كند.در كتابخانه برنامه نويسي كيوت 4 ما دو option داريم.
    - جايگاه مطلق
    - طرح ها(Layouts)

    Absolute Positioning (جايگاه مطلق)
    برنامه نويس جايگاه و اندازه هر ويدجت را در پيكسل هاي دلخواه تعيين مي كند. وقتي كه شما از جايگاه مطلق استفاده مي كنيد چند چيز را بايد مد نظر داشته باشيد:
    - اگر شما يك پنجره را تغيير سايز دهيد اندازه و جايگاه يك ويدجت تغيير نمي كند.
    - برنامه هاي كاربردي به تفاوت(اغلب بيهوده) در پلت فرم هاي مختلف توجه مي كنند.
    - تغيير فونت در برنامه هاي كاربرديتان ممكن است طرح ها را خراب كند.
    - اگر شما تصميم به تغيير طرحتان داشته باشيد بي شك اينكار براي شما خسته كننده و ملالت آور و باعث تحليل رفتن زمانتان خواهد شد.

    يك چيز مناسب وجود دارد ما مي توانيم از جايگاه هاي مطلق براي اين كار استفاده كنيم. براي مثال همين آموزش. ما نمي خواهيم مثال هاي مشكلي بسازيم! پس ما اغلب از جايگاه هاي مطلق به عنوان مثال هاي خاص استفاده مي كنيم. اما در حقيقت بيشتر برنامه نويس هاي برنامه هاي جهاني از طرح ها استفاده مي كنند.
    absolute.cpp
    #include <QApplication>
    #include <QDesktopWidget>
    #include <QTextEdit>


    class Absolute : public QWidget
    {
    public:
    Absolute(QWidget *parent = 0);
    };


    Absolute::Absolute(QWidget *parent)
    : QWidget(parent)
    {
    QTextEdit *edit = new QTextEdit(this);
    edit->setGeometry(5, 5, 200, 150);
    }

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Absolute window;

    window.setWindowTitle("Absolute");
    window.show();

    return app.exec();
    }

    متد setGeometry() براي جايگاه ويدجت روي پنجره ي فرم در هم پايه مطلق استفاده شده است.
    QTextEdit *edit = new QTextEdit(this);
    edit->setGeometry(5, 5, 200, 150);

    ما يك ويدجت QTextEdit ايجاد كرده و به طور دستي جايگاه آن را مشخص مي كنيم.متد setGeometry() دو كار را انجام مي دهد.آن ويدجت ها را در هم پايه هاي مطلق قرار مي دهد و دوباره آن ها را سايزدهي مي كند.

    تصوير: قبل از تغيير سايز دادن


    تصوير: بعد از تغيير سايز دادن
    QVBoxLayout
    QVBoxLayout به صورت عمودي ويدجت ها را رديف مي كند. ويدجت ها با استفاده از متد addWidget() به طرح اضافه مي شوند.
    verticalbox.h
    #pragma once

    #include <QWidget>

    class VerticalBox : public QWidget
    {
    public:
    VerticalBox(QWidget *parent = 0);

    };

    فايل سرآيند!
    verticalbox.cpp
    #include <QVBoxLayout>
    #include <QPushButton>
    #include "verticalbox.h"

    VerticalBox::VerticalBox(QWidget *parent)
    : QWidget(parent)
    {
    QVBoxLayout *vbox = new QVBoxLayout(this);
    vbox->setSpacing(1);

    QPushButton *settings = new QPushButton("Settings", this);
    settings->setSizePolicy(QSizePolicy::Expanding,
    QSizePolicy::Expanding);
    QPushButton *accounts = new QPushButton("Accounts", this);
    accounts->setSizePolicy(QSizePolicy::Expanding,
    QSizePolicy::Expanding);
    QPushButton *loans = new QPushButton("Loans", this);
    loans->setSizePolicy(QSizePolicy::Expanding,
    QSizePolicy::Expanding);
    QPushButton *cash = new QPushButton("Cash", this);
    cash->setSizePolicy(QSizePolicy::Expanding,
    QSizePolicy::Expanding);
    QPushButton *debts = new QPushButton("Debts", this);
    debts->setSizePolicy(QSizePolicy::Expanding,
    QSizePolicy::Expanding);

    vbox->addWidget(settings);
    vbox->addWidget(accounts);
    vbox->addWidget(loans);
    vbox->addWidget(cash);
    vbox->addWidget(debts);

    setLayout(vbox);
    }

    در اين مثال ما يك مديريت طرح عمودي داريم . كه داخل 5 button قرار مي دهيم ما دكمه هاي قابل انبساط در هر دو راستا مي سازيم.
    QVBoxLayout *vbox = new QVBoxLayout(this);
    vbox->setSpacing(1);

    ما QVBoxLayout را ايجاد كرده و 1 پيكسل فضا بين ويدجت هاي فرزند تنظيم مي كنيم.
    QPushButton *settings = new QPushButton("Settings", this);
    settings->setSizePolicy(QSizePolicy::Expanding,
    QSizePolicy::Expanding);

    ما يك دكمه ايجاد مي كنيم و خط مش يا رويه اي براي سايزدهي آن قرار مي دهيم.ويدجت هاي فرزند با مديريت طرح مديريت مي شوند. به طور پيش فرض اگ دكمه به صورت افقي افزايش پيدا كند به صورت عمودي نيز تنظيم مي شود. اگر ما سايز آن را تغيير دهيم درواقع يك رويه سايز جديد تنظيم كرده ايم. در اين مورد يك باتن در هر دو طرف(افقي و عمودي) قابل انبساط مي شود.
    vbox->addWidget(settings);
    vbox->addWidget(accounts);
    vbox->addWidget(loans);
    vbox->addWidget(cash);
    vbox->addWidget(debts);

    ما ويدجت هاي فرزند را به طرح مديريت اضافه مي كنيم.
    setLayout(vbox);

    ما مديريت QVBoxLayout را براي پنجره فرم قرار مي دهيم.
    main.cpp
    #include <QApplication>
    #include "verticalbox.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    VerticalBox window;

    window.resize(240, 230);
    window.move(300, 300);
    window.setWindowTitle("VerticalBox");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: QVBoxLayout

    دكمه ها
    در مثال زير ، ما دو دكمه بر روي محيط كلاينت نمايش مي دهيم. آنها در سمت راست پايين گوشه قرار مي گيرند.
    buttons.h
    #pragma once

    #include <QWidget>
    #include <QPushButton>

    class Buttons : public QWidget
    {
    public:
    Buttons(QWidget *parent = 0);

    private:
    QPushButton *ok;
    QPushButton *apply;

    };

    فايل سرآيند
    buttons.cpp
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include "buttons.h"

    Buttons::Buttons(QWidget *parent)
    : QWidget(parent)
    {
    QVBoxLayout *vbox = new QVBoxLayout(this);
    QHBoxLayout *hbox = new QHBoxLayout();

    ok = new QPushButton("OK", this);
    apply = new QPushButton("Apply", this);

    hbox->addWidget(ok, 1, Qt::AlignRight);
    hbox->addWidget(apply, 0, Qt::AlignRight);

    vbox->addStretch(1);
    vbox->addLayout(hbox);
    }

    گفتيم ما دو دكمه در پايين سمت راست گوشه پنجره فرم داريم.
    QVBoxLayout *vbox = new QVBoxLayout(this);
    QHBoxLayout *hbox = new QHBoxLayout();

    ما دو جعبه مدريت طرح ايجاد مي كنيم.طرح هاي طرح يكي عمودي و يكي افقي مي باشند.
    ok = new QPushButton("OK", this);
    apply = new QPushButton("Apply", this);

    ما دو دكمه ايجاد كرديم.
    hbox->addWidget(ok, 1, Qt::AlignRight);
    hbox->addWidget(apply, 0, Qt::AlignRight);

    دكمه هايي كه به درستي تنظيم و در داخل مديريت طرح افقي قرار داده شده اند. ما از روش addWidget() استفاده مي كنيم كه اولين پارامتر ويدجت فرزند مي باشد، دومين پارامتر كشيدن فاكتور مي باشد ، و آخرين پارامتر مرتب سازي مي باشد.با تنظيم فاكتور كشش 1 بر روي دكمه OK ، ما فضايي را ازسمت چپ به راستت به پنجره فرم داده ايم.ويدجت ها قابل انبساط نيستند براي همين فضاهاي تخصيص داده شده به آن ها معين مي باشند.سرانجام ثابت Qt::AlignRight ويدجت را به سمت راست از فضاي مشخص شده مي برد. ما همچنين دكمه apply را درست تنظيم مي كنيم كه زياد مهم نيست. دكمه ok در سمت راست دكمه apply آماده فشار دادن مي باشد.
    vbox->addStretch(1);
    vbox->addLayout(hbox);

    ما يك فضاي خالي گذاشتيم. فضاي قابل انبساط در جعبه عمودي توسط متد addStretch() فراخوانده مي شود.سپس ما طرح جعبه افقي را به طرح جعبه عمودي اضافه مي كنيم.
    main.cpp
    #include <QApplication>
    #include "buttons.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Buttons window;

    window.resize(290, 170);
    window.move(300, 300);
    window.setWindowTitle("Buttons");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: Buttonها

    طرح هاي تو در تو
    در اين ايده در مثال زير نشان مي دهيم كه مديريت طرح ها را مي توان تركيب كرد. با تركيب طرح هاي ساده ما مي توانيم پنجره هاي فرم تعاملي با كاربر پيچيده اي ايجاد كنيم.براي ساخت Layoutهاي تو در تو ما از متد addLayout() بهره مي بريم.
    layouts.h
    #pragma once

    #include <QWidget>

    class Layouts : public QWidget
    {
    public:
    Layouts(QWidget *parent = 0);

    };

    فايل سرآيند
    layouts.cpp
    #include <QVBoxLayout>
    #include <QPushButton>
    #include <QListWidget>
    #include "layouts.h"

    Layouts::Layouts(QWidget *parent)
    : QWidget(parent)
    {

    QVBoxLayout *vbox = new QVBoxLayout();
    QHBoxLayout *hbox = new QHBoxLayout(this);

    QListWidget *lw = new QListWidget(this);
    lw->addItem("The Omen");
    lw->addItem("The Exorcist");
    lw->addItem("Notes on a scandal");
    lw->addItem("Fargo");
    lw->addItem("Capote");

    QPushButton *add = new QPushButton("Add", this);
    QPushButton *rename = new QPushButton("Rename", this);
    QPushButton *remove = new QPushButton("Remove", this);
    QPushButton *removeall = new QPushButton("Remove All", this);

    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);

    setLayout(hbox);
    }

    در اين مثال،‌ ما يك پنجره كه شامل 4 دكمه و ليستي از ويدجت ها مي باشد را ايجاد مي كنيم.دكمه ها در ستون عمودي گروه بندي شده اند و در سمت راست ليست ويدجت ها قرار گرفته اند.اگر ما دوباره پنجره را تغيير سايز دهيم ليست ويدجت ها دوباره اندازه گيري خواهند شد.
    QVBoxLayout *vbox = new QVBoxLayout();

    VBoxLayout ستوني براي دكمه ها خواهد بود.
    QHBoxLayout *hbox = new QHBoxLayout(this);

    QHBoxLayout مديريت پايه براي ويدجت ها خواهد بود.
    QListWidget *lw = new QListWidget(this);
    lw->addItem("The Omen");
    lw->addItem("The Exorcist");
    lw->addItem("Notes on a scandal");
    lw->addItem("Fargo");
    lw->addItem("Capote");

    اينجا ما يك ليست ويدجت ايجاد مي كنيم.
    PushButton *add = new QPushButton("Add", this);
    QPushButton *rename = new QPushButton("Rename", this);
    QPushButton *remove = new QPushButton("Remove", this);
    QPushButton *removeall = new QPushButton("Remove All", this);

    اينجا ما 4 Button ايجاد مي كنيم.
    vbox->setSpacing(3);
    vbox->addStretch(1);
    vbox->addWidget(add);
    vbox->addWidget(rename);
    vbox->addWidget(remove);
    vbox->addWidget(removeall);
    vbox->addStretch(1);

    جعبه عمودي با 4 دكمه ايجاد شده است. ما بعضي از فضاهاي كوچك را در بين دكمه هايمان مي گذاريم. توجه كنيد كه ما يك فاكتور كششي به بالا و پايين از جعبه عمودي اضافه مي كنيم. اين روش، دكمه ها را به صورت عمودي متمركز كرده است.
    hbox->addWidget(lw);
    hbox->addSpacing(15);
    hbox->addLayout(vbox);

    ليست ويدجت ها و دكمه هاي جعبه عمودي داخل طرح جعبه افقي قرار داده شده است. متد addLayout() براي اضافه كردن طرحي از طرح ديگر استفاده شده است.
    setLayout(hbox);

    ما طرح فرزند را بر روي پنجره پدر تنظيم مي كنيم.
    main.cpp
    #include <QApplication>
    #include "layouts.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Layouts window;

    window.move(300, 300);
    window.setWindowTitle("Layouts");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: Layoutها

    QGridLayout
    QGridLayout ويدجت هايش را در يك شبكه قرار داده است.كه طرح بسيار قدرتمند و پيچيده مي باشد و هر برنامه نويسي بايد با اين طرح آشنا باشد.
    calculator.h
    #pragma once

    #include <QWidget>

    class Calculator : public QWidget
    {
    public:
    Calculator(QWidget *parent = 0);

    };

    فايل سرآيند
    calculator.cpp
    #include <QPushButton>
    #include <QGridLayout>
    #include "calculator.h"

    Calculator::Calculator(QWidget *parent)
    : QWidget(parent)
    {
    QGridLayout *grid = new QGridLayout(this);
    grid->setSpacing(2);

    QString values[16] = { "7", "8", "9", "/",
    "4", "5", "6", "*",
    "1", "2", "3", "-",
    "0", ".", "=", "+"
    };

    int pos = 0;

    for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
    QPushButton *btn = new QPushButton(values[pos], this);
    btn->setFixedSize(40, 40);
    grid->addWidget(btn, i, j);
    pos++;
    }
    }

    setLayout(grid);
    }

    ما يك ماشين حساب را طرح ريزي مي كنيم.
    QGridLayout *grid = new QGridLayout(this);
    grid->setSpacing(2);

    ما طرح شبكه را ايجاد مي كنيم و 2 پيكسل فضا در ميان ويدجت هاي فرزند قرار مي دهيم.
    QString values[16] = { "7", "8", "9", "/", 
    "4", "5", "6", "*",
    "1", "2", "3", "-",
    "0", ".", "=", "+"
    };

    اين ها كاراكترهايي هستند كه روي دكمه نمايش داده شده اند.
    for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
    QPushButton *btn = new QPushButton(values[pos], this);
    btn->setFixedSize(40, 40);
    grid->addWidget(btn, i, j);
    pos++;
    }
    }

    ما 16 ويدجت داخل طرح شبكه قرار مي دهيم. هر دكه يك سايز فيكس خواهد داشت.
    main.cpp
    #include <QApplication>
    #include "calculator.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Calculator window;

    window.move(300, 300);
    window.setWindowTitle("Calculator");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: QGridLayout

    طرح هاي پيچيده بيشتر
    در آخرين مثال از اين فصل ، ما يك پنجره پيچيده بيشتر استفاده مي كنيم و از مديريت QGridLayout استفاده خواهيم كرد.
    karenina.h
    #pragma once

    #include <QWidget>

    class Karenina : public QWidget
    {
    public:
    Karenina(QWidget *parent = 0);

    };

    فايل سرآيند
    karenina.cpp
    #include <QGridLayout>
    #include <QLabel>
    #include <QLineEdit>
    #include <QTextEdit>
    #include "karenina.h"

    Karenina::Karenina(QWidget *parent)
    : QWidget(parent)
    {
    QGridLayout *grid = new QGridLayout(this);
    grid->setSpacing(20);

    QLabel *title = new QLabel("Title", this);
    grid->addWidget(title, 0, 0, 1, 1);

    QLineEdit *edt1 = new QLineEdit(this);
    grid->addWidget(edt1, 0, 1, 1, 1);

    QLabel *author = new QLabel("Author", this);
    grid->addWidget(author, 1, 0, 1, 1);

    QLineEdit *edt2 = new QLineEdit(this);
    grid->addWidget(edt2, 1, 1, 1, 1);

    QLabel *review = new QLabel("Review", this);
    grid->addWidget(review, 2, 0, 1, 1);

    QTextEdit *te = new QTextEdit(this);
    grid->addWidget(te, 2, 1, 3, 1);

    setLayout(grid);
    }

    كد ايجاد كردن يك پنجره ، كه مي تواند براي عضو كردن يك مولف ، تيتر و مرور يك كتاب مورد استفاده قرار گيرد.
    QGridLayout *grid = new QGridLayout(this);
    grid->setSpacing(20);

    ما يك طرح شبكه ايجاد مي كنيم و بعضي فضاها را تنظيم مي كنيم.
    QLabel *title = new QLabel("Title", this);
    grid->addWidget(title, 0, 0, 1, 1);

    اين خط كد يك ليبل ويدجت ايجاد مي كند و آن را در داخل طرح شبكه قرار مي دهد. متد addWidget() پنج پارامتر دارد. اولين پارامتر ويدجت فرزند مي باشد . به عنوان مثال يك ليبل. د. پارامتر بعدي سطر و ستون در شبكه مي باشد.اين پارامتر تعيين مي كند چگونه تعداد زيادي رديف را در ويدجت جاري جاسازي كنيم. در اين مورد ليبل مربوطه فقط يك ستون و يك سطر خواهد بود.
    QTextEdit *te = new QTextEdit(this);
    grid->addWidget(te, 2, 1, 3, 1);

    ويدجت QTextEdit را در سومين سطر و دومين ستون قرار مي دهيم.آن سه سطر و يك ستون را محدود مي كند.
    main.cpp
    #include <QApplication>
    #include "karenina.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Karenina window;

    window.move(300, 300);
    window.setWindowTitle("Anna Karenina");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: Karenina

    اين بخش از آموزش كيوت 4 به مديريت طرح ها اختصاص داده شد.

    پايان بخش Layout managment in Qt4
    آخرین ویرایش به وسیله complexcoding : جمعه 23 فروردین 1392 در 11:30 صبح

  12. #12
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    رويدادها و سيگنال ها در كيوت 4
    در اين قست از آموزش برنامه نويسي ++‍C كيوت 4 ما درباره سيگنال ها و eventها بحث خواهيم كرد.
    رويدادها يكي از مهمترين بخش ها در هر بنامه GUI مي باشند. همه ي برنامه هاي كاربردي GUI از رخداد مشتق شده اند.يك برنامه كاربردي به رويدادهايي كه در مدت اجراي آن رخ مي دهد واكنش نشان مي دهد.رويدادها اساسا توسط كاربر يك برنامه توليد مي شوند. اما آن ها توسط عوامل ديگر نيز توليد مي شوند. مانند اتصال به اينترنت ، مديريت پنجره ها ، تايمر. در اين مدل event ما سه شركت كننده داريم.

    • event source
    • event object
    • event target

    شي event source كه حالتش تغيير مي كند براي توليد رويدادها مي باشد.رخداد شي ها به صورت حالت تغييرات در منبع رخداد كپسوله شده اند. event target شي مي باشد كه اطلاعاتي را كه بايد داده شود درخواست مي كند. دليگيت شي event source وظيفه به كاربردن يك رخداد براي رخداد هدف را دارد.
    زماني كه ما متد exec() يك برنامه كاربردي را فرامي خوانيم. برنامه وارد حلقه اصلي مي شود.حلقه main رخدادها را بازخواني مي كند و شي ها را ارسال مي نمايد. Trolltech سيگنال منحصر به فرد و مكانيزم اسلات را معرفي مي كند. مكانيزم سيگنال و اسلات در زبان برنامه نويسي ++C گسترش يافته اند.
    سيگنال ها و اسلات ها براي ارتباط بين شي ها استفاده شده اند.يك اسلات يك متد نرمال ++C مي باشد. زماني كه سيگنالي به سمت ساطع شدن اتصال پيدا كند يك اسلات فراخوانده مي شود.

    Click
    در اين مثال ، مثال ساده از به كار بردن event خيلي ساده را نمايش خواهيم داد.ما يك پوش باتن داريم. توسط كليك بر روي پوش باتن برنامه كاربردي را مي بنديم.
    lines.h
    #pragma once

    #include <QWidget>

    class Click : public QWidget
    {
    public:
    Click(QWidget *parent = 0);

    };

    فايل سرآيند
    lines.cpp
    #include <QPushButton>
    #include <QApplication>
    #include "click.h"

    Click::Click(QWidget *parent)
    : QWidget(parent)
    {
    QPushButton *quit = new QPushButton("Quit", this);
    quit->setGeometry(50, 40, 75, 30);

    connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
    }

    ما يك QPush Button روي پنجره فرم نمايش مي دهيم.
    connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));

    متد Connect() يك سيگنال به اسلات متصل مي گرداند. زماني كه روي دكمه Quit كليك مي كنيم. سيگنال Clicked() تمام مي شود.qApp يك اشاره گر عمومي به شي برنامه مي باشد. كه در فايل سرآيند <QApplication> تعريف شده است. زماني كه سيگنال Clicked() ساطع شود متد Quit فراخوانده مي شود.
    main.cpp
    #include <Application>
    #include "click.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Click window;

    window.move(300, 300);
    window.resize(250, 150);
    window.setWindowTitle("Click");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: كليك

    KeyPress
    در مثال زير ما به فشار دادن يك كليد واكنش نشان مي دهيم.
    keypress.h
    #pragma once

    #include <QWidget>

    class KeyPress : public QWidget
    {
    public:
    KeyPress(QWidget *parent = 0);

    protected:
    void keyPressEvent(QKeyEvent * e);
    };

    فايل سرآيند
    keypress.cpp
    #include <QApplication>
    #include <QKeyEvent>

    #include "keypress.h"

    KeyPress::KeyPress(QWidget *parent)
    : QWidget(parent)
    {

    }

    void KeyPress::keyPressEvent(QKeyEvent *event)
    {
    if (event->key() == Qt::Key_Escape) {
    qApp->quit();
    }
    }

    اگر ما دكمه Escape را فشار دهيم برنامه خاتمه پيدا مي كند.
    void KeyPress::keyPressEvent(QKeyEvent *e)
    {
    if (e->key() == Qt::Key_Escape) {
    qApp->quit();
    }
    }

    يكي از روش هاي كاركردن با رخداد در برنامه نويسي Qt 4 دوباره اجرا كردن نگه دارنده رخدا مي باشد.شي رخداد QKeyEvent كه اطلاعات را درباره اينكه چه اتفاقي رخ داده است نگهداري مي كند. در اين مورد ما از شي رخداد براي تعيين با دقت اينكه كه كدام كليد فشرده شده است استفاده مي كنيم.
    main.cpp
    #include <QApplication>
    #include "keypress.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    KeyPress window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("Key press");
    window.show();

    return app.exec();
    }

    فايل اصلي

    QMainEvent
    كلاس QMoveEvent1 شامل پارامترهايي براي نقل مكان رخدادها مي باشد.رخدادهاي حركتي يا نقل مكان به ويدجت هايي ارسال مي شوند كه جركت كرده يا تغيير مكان داده باشند.
    move.h
    #pragma once

    #include <QMainWindow>

    class Move : public QWidget
    {
    Q_OBJECT

    public:
    Move(QWidget *parent = 0);

    protected:
    void moveEvent(QMoveEvent *e);

    };

    فايل سرآيند
    move.cpp
    #include <QMoveEvent>
    #include "move.h"

    Move::Move(QWidget *parent)
    : QWidget(parent)
    {

    }

    void Move::moveEvent(QMoveEvent *e)
    {
    int x = e->pos().x();
    int y = e->pos().y();

    QString text = QString::number(x) + "," + QString::number(y);

    setWindowTitle(text);
    }

    در برنامه نويسي اين مثال ما ،‌ ما به حركت رخداد واكنش نشان مي دهيم. ما مختصات جريان X و Y را از گوشه سمت چپ بالا در فرم ويندوزي كلاينت تعيين مي كنيم و مقدار تيتر فرم ويندوزي را نيز تنظيم مي كنيم.
    int x = e->pos().x();
    int y = e->pos().y();

    ما از شي QMoveEvent براي تعيين مقدار x و y استفاده مي كنيم.
    QString text = QString::number(x) + "," + QString::number(y);

    ما مقدار عددي را به رشته تبديل مي كنيم.
    setWindowTitle(text);

    فايل اصلي
    main.cpp
    #include <QApplication>
    #include "move.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Move window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("Move");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: QMoveEvent

    منفصل كردن يك سيگنال
    يك سيگنال مي تواند از يك اسلات قطع شود. در مثال بعد ما نمايش خواهيم داد كه چگونه اين كار را به انجام برسانيم.
    disconnect.h
    #pragma once

    #include <QWidget>
    #include <QPushButton>

    class Disconnect : public QWidget
    {
    Q_OBJECT

    public:
    Disconnect(QWidget *parent = 0);

    private slots:
    void onClick();
    void onCheck(int);

    private:
    QPushButton *click;
    };

    در فايل سرآيند ، ما دو اسلات ا اعلام مي كنيم. Slotها جزو كلمات كليدي سي پلاس پلاس نمي باشند. آن پسوند كتابخانه برنامه نويسي Qt4 مي باشد. اين پسوندها توسط پيش پردازنده استفاده مي شوند. قبل از اينكه كد كامپايل شود. زماني كه ما از سيگنال ها و اسلات ها د كلاس خود استفاده كنيم ، بايد ماكرو Q_OBJECT را براي شروع شدن در كلاس تعريف شده آماده كنيم. در غير اينصورت در حين پردازش خطا صادر مي شود.
    disconnect.cpp
    #include <QTextStream>
    #include <QCheckBox>
    #include "disconnect.h"

    Disconnect::Disconnect(QWidget *parent)
    : QWidget(parent)
    {
    click = new QPushButton("Click", this);
    click->setGeometry(50, 40, 75, 30);

    QCheckBox *cb = new QCheckBox("Connect", this);
    cb->setCheckState(Qt::Checked);
    cb->move(150, 40);

    connect(click, SIGNAL(clicked()), this, SLOT(onClick()));
    connect(cb, SIGNAL(stateChanged(int)), this, SLOT(onCheck(int)));
    }

    void Disconnect::onClick()
    {
    QTextStream out(stdout);
    out << "Button clicked" << endl;
    }

    void Disconnect::onCheck(int state)
    {
    if (state == Qt::Checked) {
    connect(click, SIGNAL(clicked()), this, SLOT(onClick()));
    } else {
    click->disconnect(SIGNAL(clicked()));
    }
    }

    در اين مثال يك دكمه و يك چك باكس داريم. چك باكس يك اسلات را از سيگنال كليك دكمه قطع و وصل مي كند.اين مثال بايد از خط فرمان اجرا شود.
    connect(click, SIGNAL(clicked()), 
    this, SLOT(onClick()));
    connect(cb, SIGNAL(stateChanged(int)),
    this, SLOT(onCheck(int)));

    در اينجا سيگنال ما به اسلات تعريف شده كاربر اتصال پيدا مي كند
    void Disconnect::onClick() 
    {
    QTextStream out(stdout);
    out << "Button clicked" << endl;
    }

    اگر ما روي دكمه باتن كليك كنيم، ما متن "Button clicked" را به خروجي ويندوز ارسال مي كنيم.
    void Disconnect::onCheck(int state)
    {
    if (state == Qt::Checked) {
    connect(click, SIGNAL(clicked()),
    this, SLOT(onClick()));
    } else {
    click->disconnect(SIGNAL(clicked()));
    }
    }

    درج اسلات OnChecked()، ما اسلات OnClick() را از دكمه كليك قطع و وصل مي كنيم.
    main.cpp
    #include <QApplication>
    #include "disconnect.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Disconnect window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("Disconnect");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تايمر Timer
    يك تايمر براي استفاده سيگنال هاي رها شده يا وظايف تكراري استفاده مي شود. يك مثال خوب كه يك تايمر را به عنوان ساعت استفاده كنيم. هر ثانيه بايد ليبل را براي نمايش زمان جاري Update كنيم.
    timer.h
    #pragma once

    #include <QWidget>
    #include <QLabel>

    class Timer : public QWidget
    {
    public:
    Timer(QWidget *parent = 0);

    protected:
    void timerEvent(QTimerEvent *e);

    private:
    QLabel *label;
    };

    فايل سرآيند
    timer.cpp
    #include <QTime>
    #include "timer.h"

    Timer::Timer(QWidget *parent)
    : QWidget(parent)
    {
    label = new QLabel("", this);
    label->move(50, 50);

    QTime qtime = QTime::currentTime();
    QString stime = qtime.toString();
    label->setText(stime);

    startTimer(1000);
    }

    void Timer::timerEvent(QTimerEvent *e)
    {
    Q_UNUSED(e);

    QTime qtime = QTime::currentTime();
    QString stime = qtime.toString();
    label->setText(stime);
    }

    در اين مثال ،‌ ما مكان فعلي زمان را روي پنجره فرم نمايش مي دهيم.
    label = new QLabel("", this);
    label->move(50, 50);

    براي نمايش زمان ، ما از ويدجت برچسب استفاده مي كنيم.
    QTime qtime = QTime::currentTime();
    QString stime = qtime.toString();
    label->setText(stime);

    اينجا مكان زمان را و همچنين ويدجت ليبل را تنظيم مي كنيم.
    startTimer(1000);

    ما تايمر را استارت مي كنيم.هر 1000 ميلي ثانيه رخداد تايمر توليد مي شود.
    void Timer::timerEvent(QTimerEvent *e)
    {
    Q_UNUSED(e);

    QTime qtime = QTime::currentTime();
    QString stime = qtime.toString();
    label->setText(stime);
    }

    براي كار با رخدادهاي تايمر، ما بايد دوباره متد timerEvent() را اجرا كنيم.
    main.cpp
    #include <QApplication>
    #include "timer.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Timer window;

    window.move(300, 300);
    window.resize(150, 100);
    window.setWindowTitle("Timer");
    window.show();

    return app.exec();
    }

    فايل اصلي


    تصوير: تايمر

    اين بخش به سيگنال ها و رخدادها در كيوت 4 اختصاص داده شده بود.

    پايان بخش Events and Signals
    آخرین ویرایش به وسیله complexcoding : یک شنبه 18 فروردین 1392 در 20:10 عصر

  13. #13
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    ويدجت هاي كيوت 4
    در اين بخش از آموزش برنامه نويسي كيوت 4 ،‌ ما درباره برخي ويدجت هاي پايه Qt بحث خواهيم كرد.
    ويدجت ها بلوك هاي ساختماني پايه از برنامه كاربردي مي باشند.كتابخانه كيوت 4 مجموعه اي غني از ويدجت هاي مختلف دارد.
    QLabel
    ويدجت QLabel براي نمايش تصوير و متن استفاده ولي بدون تعامل با كاربر در دسترس مي باشد. در مثال زير متن را نمايش خواهيم داد.
    label.h
    #ifndef LABEL_H
    #define LABEL_H

    #include <QWidget>
    #include <QLabel>

    class Label : public QWidget
    {
    public:
    Label(QWidget *parent = 0);

    private:
    QLabel *label;

    };

    #endif

    فايل سرآيند براي كد مثال ما
    label.cpp
    #include <QVBoxLayout>
    #include <QFont>
    #include "label.h"

    Label::Label(QWidget *parent)
    : QWidget(parent)
    {
    QString lyrics = "Who doesn't long for someone to hold\n\
    Who knows how to love you without being told\n\
    Somebody tell me why I'm on my own\n\
    If there's a soulmate for everyone\n\
    \n\
    Here we are again, circles never end\n\
    How do I find the perfect fit\n\
    There's enough for everyone\n\
    But I'm still waiting in line\n\
    \n\
    Who doesn't long for someone to hold\n\
    Who knows how to love you without being told\n\
    Somebody tell me why I'm on my own\n\
    If there's a soulmate for everyone";

    label = new QLabel(lyrics, this);
    label->setFont(QFont("Purisa", 10));

    QVBoxLayout *vbox = new QVBoxLayout();
    vbox->addWidget(label);
    setLayout(vbox);
    }

    ما از ويدجت QLabel براي نمايش اشعار در پنجره فرم استفاده مي كنيم.
    label = new QLabel(lyrics, this);
    label->setFont(QFont("Purisa", 10));

    ما يك ويدجت Label ايجاد كرده و فونت مشخص را براي آن انتخاب مي كنيم.
    main.cpp
    #include <QApplication>
    #include <QTextStream>
    #include "label.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Label window;

    window.move(300, 300);
    window.setWindowTitle("QLabel");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QLabel

    QSlider
    QSlidert ويدجتي مي باشد كه كار كردن با آن راحت هست.اين دسته را مي توان به طرف عقب و جلو كشيد.در اين روش ما يك مقدار را براي يك وظيفه خاص انتخاب مي كنيم.
    slider.h
    #ifndef SLIDER_H
    #define SLIDER_H

    #include <QWidget>
    #include <QSlider>
    #include <QLabel>

    class Slider : public QWidget
    {
    Q_OBJECT

    public:
    Slider(QWidget *parent = 0);

    private:
    QSlider *slider;
    QLabel *label;

    };

    #endif

    فايل سرآيند اين مثال
    slider.cpp
    #include "slider.h"

    Slider::Slider(QWidget *parent)
    : QWidget(parent)
    {
    slider = new QSlider(Qt::Horizontal , this);
    slider->setGeometry(50, 50, 130, 30);

    label = new QLabel("0", this);
    label->setGeometry(230, 50, 20, 30);

    connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));
    }

    ما يك اسلايدر و يك ليبل در صفحه فرم نمايش مي دهيم. اسلايدر تعداد نمايش داده شده در ليبل را كنترل مي كند.
    slider = new QSlider(Qt::Horizontal , this);

    يك QSlider افقي ايجاد شد.
    connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));

    در اين خط كد ،‌ ما سيگنال ValueChanged() را به اسلات از پيش تعريف شده setNum() متصل مي كنيم.
    main.cpp
    #include <QApplication>
    #include "slider.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Slider window;

    window.move(300, 300);
    window.setWindowTitle("QSlider");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير:QSlider

    QSpinBox
    QSpinBox يك ويدجت مي باشد كه براي نمايش اعداد صحيح و مجموعه گسسته از مقدارها به كار مي رود. در مثال كد ما يك ويدجت spinbox داريم.. ما مي توانيم اعداد از صفر تا 99 را انتخاب كنيم.انتخاب هاي جاري در نوار عنوان پنجره نمايش داده مي شوند.
    spinbox.h
    #ifndef SPINBOX_H
    #define SPINBOX_H

    #include <QWidget>
    #include <QSpinBox>

    class SpinBox : public QWidget
    {
    Q_OBJECT

    public:
    SpinBox(QWidget *parent = 0);

    private slots:
    void setTitle(int);

    private:
    QSpinBox *spinbox;

    };

    #endif

    فايل سرآيند مثال spinBox
    spinbox.cpp
    #include "spinbox.h"

    SpinBox::SpinBox(QWidget *parent)
    : QWidget(parent)
    {
    spinbox = new QSpinBox(this);
    spinbox->setGeometry(50, 50, 60, 30);

    connect(spinbox, SIGNAL(valueChanged(int)),
    this, SLOT(setTitle(int)));

    }

    void SpinBox::setTitle(int val)
    {
    setWindowTitle(QString::number(val));

    }

    ما يك spinbox روي پنجره قرار مي دهيم و سيگنال valueChanged() را به متد setTiltle() اتصال مي دهيم.
    void SpinBox::setTitle(int val) 
    {
    setWindowTitle(QString::number(val));
    }

    اين متد عنوان پنجره را بر اساس اعداد انتخاب شده در spinBox تنظيم مي كند.
    main.cpp
    #include <QApplication>
    #include "spinbox.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    SpinBox window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("0");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QSpinBox

    QLineEdit
    QLineEdit يك ويدجتي مي باشد كه اجازه مي دهد خطوط حاوي متن هاي ساده را وارد و ويرايش كنيم.تابع هاي cut/paste و undo/redo و همچنين كشيدن و رها كردن در ويدجت QLineEdit در دسترس مي باشند.
    در مثال زير ما ويرايش سه خط و سه برچسب را نشان خواهيم داد.
    ledit.h
    #ifndef LEDIT_H
    #define LEDIT_H

    #include <QWidget>

    class Ledit : public QWidget
    {
    public:
    Ledit(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي اين مثال
    ledit.cpp
    #include <QGridLayout>
    #include <QLabel>
    #include <QLineEdit>
    #include "ledit.h"

    Ledit::Ledit(QWidget *parent)
    : QWidget(parent)
    {
    QLabel *name = new QLabel("Name:", this);
    QLabel *age = new QLabel("Age:", this);
    QLabel *occupation = new QLabel("Occupation:", this);

    QLineEdit *le1 = new QLineEdit(this);
    QLineEdit *le2 = new QLineEdit(this);
    QLineEdit *le3 = new QLineEdit(this);

    QGridLayout *grid = new QGridLayout();

    grid->addWidget(name, 0, 0);
    grid->addWidget(le1, 0, 1);
    grid->addWidget(age, 1, 0);
    grid->addWidget(le2, 1, 1);
    grid->addWidget(occupation, 2, 0);
    grid->addWidget(le3, 2, 1);

    setLayout(grid);
    }

    سه برچسب و سه خط ويرايش با مديريت QGridLayout دوباره سازماندهي شده اند.
    main.cpp
    #include "ledit.h"
    #include <QApplication>


    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Ledit window;

    window.move(300, 300);
    window.setWindowTitle("QLineEdit");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QLineEdit

    نوار وضعيت
    نوار وضعيت يك پنل مي باشد. كه براي نمايش اطلاعات وضعيت نرم افزار نمايش داده مي شود. در مثال ما ، دو دكمه و يك نوار وظيفه داريم هر كدام از اين دكمه ها يك پيام نمايش مي دهند اگر ما روي نوار عنوان در بخش ويدجت QMainWindow كليك كنيم.
    statusbar.h
    #ifndef STATUSBAR_H
    #define STATUSBAR_H

    #include <QMainWindow>
    #include <QPushButton>

    class Statusbar : public QMainWindow
    {
    Q_OBJECT

    public:
    Statusbar(QWidget *parent = 0);

    private slots:
    void OnOkPressed();
    void OnApplyPressed();

    private:
    QPushButton *ok;
    QPushButton *apply;

    };

    #endif

    فايل سرآيند درباره مثال ما
    statusbar.cpp
    #include <QGridLayout>
    #include <QLabel>
    #include <QFrame>
    #include <QStatusBar>
    #include "statusbar.h"

    Statusbar::Statusbar(QWidget *parent)
    : QMainWindow(parent)
    {
    QFrame *frame = new QFrame(this);
    setCentralWidget(frame);

    ok = new QPushButton("OK", frame);
    ok->move(20, 50);

    apply = new QPushButton("Apply", frame);
    apply->move(120, 50);

    statusBar();

    connect(ok, SIGNAL(clicked()), this, SLOT(OnOkPressed()));
    connect(apply, SIGNAL(clicked()), this, SLOT(OnApplyPressed()));
    }

    void Statusbar::OnOkPressed()
    {
    statusBar()->showMessage("OK button pressed", 2000);
    }

    void Statusbar::OnApplyPressed()
    {
    statusBar()->showMessage("Apply button pressed", 2000);
    }

    فايل statusbar.cpp
    QFrame *frame = new QFrame(this);
    setCentralWidget(frame);

    ويدجت QFrame مركز محيط ويدجت QMainWindow قرار دارد.
    ok = new QPushButton("OK", frame);
    ok->move(20, 50);

    apply = new QPushButton("Apply", frame);
    apply->move(120, 50);

    نا QFrame را ايجاد كرده و دو ويدجت Button قرار مي دهيم.
    statusBar();

    در نمايش ويدجت نوار وضعيت ، ما متد statusBar() را از ويدجت QMainWindow فرا مي خوانيم.
    void Statusbar::OnOkPressed()
    {
    statusBar()->showMessage("OK button pressed", 2000);
    }

    متد showMessage() يك پيام در نوار عنوان نمايش مي دهد.
    main.cpp
    #include <QApplication>
    #include "statusbar.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Statusbar window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("QStatusBar");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: مثال نوار وضعيت

    در اين قسمت از آموزش Qt 4 ما چندين ويدجت از Qt 4 را معرفي كرديم.

    پايان بخش Qt 4 Widgets
    آخرین ویرایش به وسیله complexcoding : یک شنبه 18 فروردین 1392 در 22:21 عصر

  14. #14
    کاربر دائمی آواتار complexcoding
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    قزوین
    سن
    33
    پست
    744

    نقل قول: آموزش سريع Qt4

    ويدجت ها كيوت 4 بخش دوم
    در اين قسمت از آموزش كيوت 4 ما بحث را درباره ويدجت هاي كيوت 4 ادامه مي دهيم.
    QCheckBox
    QCheckBox يك ويدجت مي باشد كه داراي دو حالت روشن و خاموش هست. آن يك جعبه همراه يك Label مي باشد. اگر چك باكس در حالت Checked باشد يك تيك درون جعبه قرار مي گيرد.
    در مثال ما ، يك چكباكس در پنجره فرم نمايش مي دهيم. اگر چك باكس تيك بخورد ، يك عنوان براي پنجره نمايش داده مي شود در غير اينصورت عنوان مخفي مي ماند.
    checkbox.h
    #ifndef CHECKBOX_H
    #define CHECKBOX_H

    #include <QWidget>

    class CheckBox : public QWidget
    {
    Q_OBJECT

    public:
    CheckBox(QWidget *parent = 0);

    private slots:
    void showTitle(int);

    };

    #endif

    اين يك سرآيند براي كدهاي مثال ما مي باشد.
    checkbox.cpp
    #include "checkbox.h"
    #include <QCheckBox>


    CheckBox::CheckBox(QWidget *parent)
    : QWidget(parent)
    {
    QCheckBox *cb = new QCheckBox("Show Title", this);
    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("");
    }
    }
    ما Checkbox را روي پنجره نمايش داده و به اسلات shotTitle() اتصال پيدا مي كنيم.
    cb->setCheckState(Qt::Checked);

    زماني كه مثال شروع مي شود CheckBox تيك خوده مي باشد.
    void CheckBox::showTitle(int state)
    {
    if (state == Qt::Checked) {
    setWindowTitle("QCheckBox");
    } else {
    setWindowTitle("");
    }
    }

    ما حالت CheckBox را تعيين مي كنيم و متد setWindowTitle() را بر اين اساس فرا مي خوانيم.
    main.cpp
    #include "checkbox.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    CheckBox window;

    window.resize(250, 150);
    window.move(300, 300);
    window.setWindowTitle("QCheckBox");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QCheckBox

    QListWidget
    QListWidget يك ويدجت مي باشد كه براي نمايش ليستي از آتيم ها نمايش داده مي شود.. در در اين مثال، ما نشان خواهيم داد كه چطور آيتم ها را تغيير نام دهيم يا پاك و اضافه كنيم.
    listwidget.h
    #ifndef LISTWIDGET_H
    #define LISTWIDGET_H

    #include <QWidget>
    #include <QPushButton>
    #include <QListWidget>

    class ListWidget : public QWidget
    {
    Q_OBJECT

    public:
    ListWidget(QWidget *parent = 0);

    private slots:
    void addItem();
    void renameItem();
    void removeItem();
    void clearItems();

    private:
    QListWidget *lw;
    QPushButton *add;
    QPushButton *rename;
    QPushButton *remove;
    QPushButton *removeAll;

    };

    #endif

    فايل سرآيند براي اين مثال
    listwidget.cpp
    #include "listwidget.h"
    #include <QVBoxLayout>
    #include <QInputDialog>


    ListWidget::ListWidget(QWidget *parent)
    : QWidget(parent)
    {
    QVBoxLayout *vbox = new QVBoxLayout();
    vbox->setSpacing(10);

    QHBoxLayout *hbox = new QHBoxLayout(this);

    lw = new QListWidget(this);
    lw->addItem("The Omen");
    lw->addItem("The Exorcist");
    lw->addItem("Notes on a scandal");
    lw->addItem("Fargo");
    lw->addItem("Capote");

    add = new QPushButton("Add", this);
    rename = new QPushButton("Rename", this);
    remove = new QPushButton("Remove", this);
    removeAll = new QPushButton("Remove All", this);

    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()
    {
    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);
    }
    }

    void ListWidget::renameItem()
    {
    QListWidgetItem *curitem = lw->currentItem();
    int r = lw->row(curitem);
    QString text = curitem->text();
    QString item = QInputDialog::getText(this, "Item",
    "Enter new item", QLineEdit::Normal, text);

    item = item.simplified();

    if (!item.isEmpty()) {
    lw->takeItem(r);
    delete curitem;
    lw->insertItem(r, item);
    lw->setCurrentRow(r);
    }
    }

    void ListWidget::removeItem()
    {
    QListWidgetItem *item = lw->currentItem();

    if (item) {
    int r = lw->row(item);
    lw->takeItem(r);
    delete item;
    }
    }

    void ListWidget::clearItems()
    {
    if (lw->count() != 0)
    lw->clear();
    }

    ما يك ويدجت ليست و 4 دكمه نمايش مي دهيم. ما از اين دكمه ها براي پاك كردن ، اضافه كردن و تغيير نام از ويدجت ليست استفاده مي كنيم.
    lw = new QListWidget(this);
    lw->addItem("The Omen");
    lw->addItem("The Exorcist");
    lw->addItem("Notes on a scandal");
    lw->addItem("Fargo");
    lw->addItem("Capote);

    QListWidget با 5 آيتم ايجاد شده است.
    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);
    }
    }

    متد addItem() يك آيتم جديد به ويدجت ليست اضافه مي كند. اين ديالوگ يك مقدار رشته اي باز مي گرداند. ما توسط متد simplified() فضاهاي خالي از رشته را پاك مي كنيم كه اگر رشته اي را بازگرداند پس آن تهي نيست ، و ما آنرا به ويدجت ليست اضافه مي كنيم.در آخر ما آيتم هاي مندرج را highlight (مشخص) مي كنيم.
    void ListWidget::renameItem()
    {
    QListWidgetItem *curitem = lw->currentItem();
    int r = lw->row(curitem);
    QString text = curitem->text();
    QString item = QInputDialog::getText(this, "Item",
    "Enter new item", QLineEdit::Normal, text);

    item = item.simplified();

    if (!item.isEmpty()) {
    lw->takeItem(r);
    delete curitem;
    lw->insertItem(r, item);
    lw->setCurrentRow(r);
    }
    }

    تغيير نام يك آيتم شامل چندين مرحله مي باشد. ابتدا با استفاده از متد currentItem() آيتم هاي جاري را دريافت مي كنيم.ما متن آيتم و سطحي را كه آيتم در آن قرار گرفته دريافت مي كنيم. متن آيتم در ديالوگ QInputDialog نمايش داده شده است. رشته اي كه از ديالوگ بازگردانده شده است توسط متد simplefied() فضاهاي خالي آن پاك شده است. سپس ما توسط متد takeItem() آيتم هاي قديمي را پاك مي كنيم و آن ها را توسط متد insertItem() جايگزين مي كنيم. در آخر يك آيتم جديد توسط setCurrentRow() انتخاب مي كنيم.
    void ListWidget::removeItem()
    {
    QListWidgetItem *item = lw->currentItem();

    if (item) {
    int r = lw->row(item);
    lw->takeItem(r);
    delete item;
    }
    }

    متد removeItem() آيتم هاي تعيين شده از يك ليست را پاك مي كند.. در ابتدا ، ما انتخاب هاي جاري از QListWidgetItem دريافت مي كنيم. ما با استفاده از متد takeItem() سطر جاري را انتخاب كرده و آيتم ها را پاك مي كنيم. توجه كنيد كه ما بصورت دستي QListWidgetItem را Delete مي كنيم.
    void ListWidget::clearItems()
    {
    if (lw->count() != 0)
    lw->clear();
    }

    متد Clear() همه آيتم ها را از ويدجت ليست پاك مي كند.
    main.cpp
    #include "listwidget.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    ListWidget window;

    window.move(300, 300);
    window.setWindowTitle("QListWidget");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QListWidget

    QPixmap
    QPixmap يكي از ويدجت هاي براي كار با عكس (Image) مي باشد.. كه براي نمايش تصاوير روي صفحه نمايش بهينه شده است. در كد مثال ما ، ما از QPixmap براي نمايش تصاوير روي پنجره فرم استفاده مي كنيم.
    pixmap.h
    #ifndef PIXMAP_H
    #define PIXMAP_H

    #include <QWidget>

    class Pixmap : public QWidget
    {
    public:
    Pixmap(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي اين مثال
    pixmap.cpp
    #include "pixmap.h"
    #include <QPixmap>
    #include <QLabel>
    #include <QHBoxLayout>

    Pixmap::Pixmap(QWidget *parent)
    : QWidget(parent)
    {
    QHBoxLayout *hbox = new QHBoxLayout(this);

    QPixmap pixmap("bojnice.jpg");

    QLabel *label = new QLabel(this);
    label->setPixmap(pixmap);

    hbox->addWidget(label);
    setLayout(hbox);
    }

    ما تصويري(Image) را از يك قلعه معروف در مركز اسلواكي نمايش مي دهيم.
    QPixmap pixmap("bojnice.jpg");

    QLabel *label = new QLabel(this);
    label->setPixmap(pixmap);

    ما يك pixmap ايجاد مي كنيم و در داخل يك ويدجت ليبل قرار مي دهيم.
    main.cpp
    #include "pixmap.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Pixmap window;

    window.move(300, 300);
    window.setWindowTitle("QPixmap");
    window.show();

    return app.exec();
    }

    فايل اصلي

    QSplitter
    QSplitter به ما اين اجازه را مي دهد تا اندازه ويدجت فرزندان را با كشيدن خط بين فرزندان كنترل كنيم. در مثال ما ، ما سه ويدجت QFrame با دو جدا كننده نمايش مي دهيم.
    splitter.h
    #ifndef SPLITTER_H
    #define SPLITTER_H

    #include <QWidget>

    class Splitter : public QWidget
    {
    public:
    Splitter(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي اين مثال
    splitter.cpp
    #include "splitter.h"
    #include <QFrame>
    #include <QSplitter>
    #include <QHBoxLayout>


    Splitter::Splitter(QWidget *parent)
    : QWidget(parent)
    {
    QHBoxLayout *hbox = new QHBoxLayout(this);

    QFrame *topleft = new QFrame(this);
    topleft->setFrameShape(QFrame::StyledPanel);

    QFrame *topright = new QFrame(this);
    topright->setFrameShape(QFrame::StyledPanel);

    QSplitter *splitter1 = new QSplitter(Qt::Horizontal, this);
    splitter1->addWidget(topleft);
    splitter1->addWidget(topright);

    QFrame *bottom = new QFrame(this);
    bottom->setFrameShape(QFrame::StyledPanel);

    QSplitter *splitter2 = new QSplitter(Qt::Vertical, this);
    splitter2->addWidget(splitter1);
    splitter2->addWidget(bottom);

    hbox->addWidget(splitter2);
    setLayout(hbox);
    }

    ما سه ويدجت frame و دو ويدجت splitter داريم.
    QSplitter *splitter1 = new QSplitter(Qt::Horizontal, this);
    splitter1->addWidget(topleft);
    splitter1->addWidget(topright);

    ما يك ويدجت splitter ايجاد مي كنيم و دو ويدجت frame داخل splitter اضافه مي كنيم.
    QSplitter *splitter2 = new QSplitter(Qt::Vertical, this);
    splitter2->addWidget(splitter1);

    ما همچنين مي توانيم splitter را به ديگر ويدجت هاي splitter اضافه كنيم.
    main.cpp
    #include "pixmap.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Pixmap window;

    window.move(300, 300);
    window.setWindowTitle("QPixmap");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QSplitter

    در برخي از تم هاي دسكتاپ splitter قادر نيست تا خوب به نمايش در آيد.

    QTableWidget
    QTableWidget يك ويدجت منحصر به فرد مي باشد كه در برنامه هاي كابردي صفحه گسرده استفاده مي شود. برحي اوقات از اين ويدجت به عنوان ويدجت شبكه نيز استفاده مي شود. اين ويدجت يكي از پيچيده ترين ويدجت ها مي باشد. در اينجا تنها اين ويدجت را روي پنجره فرم نمايش خواهيم داد.
    table.h
    #ifndef TABLE_H
    #define TABLE_H

    #include <QWidget>

    class Table : public QWidget
    {
    public:
    Table(QWidget *parent = 0);

    };

    #endif

    فايل سرآيند براي اين مثال
    table.cpp
    #include "table.h"
    #include <QHBoxLayout>
    #include <QTableWidget>

    Table::Table(QWidget *parent)
    : QWidget(parent)
    {
    QHBoxLayout *hbox = new QHBoxLayout(this);

    QTableWidget *table = new QTableWidget(25, 25, this);

    hbox->addWidget(table);
    setLayout(hbox);
    }

    QTableWidget *table = new QTableWidget(25, 25, this);

    در اينجا ما يك ويدجت table با 25 سطر و 25 ستون ايجاد خواهيم كرد.
    main.cpp
    #include "table.h"
    #include <QApplication>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Table window;

    window.move(300, 300);
    window.setWindowTitle("QTableWidget");
    window.show();

    return app.exec();
    }

    فايل اصلي

    تصوير: QTableWidget

    در اين فصل ما چندين ويدجت ديگر از كتابخانه كيوت 4 را مورد بررسي قرار داديم.

    پايان بخش Qt 4 Widgets II
    آخرین ویرایش به وسیله complexcoding : دوشنبه 19 فروردین 1392 در 06:52 صبح

  15. #15

    نقل قول: آموزش سريع Qt4

    عالی بود
    بقیه اش رو ادامه نمیدید؟

تاپیک های مشابه

  1. آموزش سريع SQL
    نوشته شده توسط nasim2008 در بخش SQL Server
    پاسخ: 4
    آخرین پست: دوشنبه 25 آذر 1387, 12:33 عصر
  2. آموزش سی شارپ
    نوشته شده توسط ehsan-ets در بخش C#‎‎
    پاسخ: 15
    آخرین پست: پنج شنبه 27 اردیبهشت 1386, 19:16 عصر
  3. آموزش کامل ASP.Net
    نوشته شده توسط mostafa_pk در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: چهارشنبه 22 شهریور 1385, 18:20 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •