لطفا وارد شوید یا ثبت‌نام کنید تا به انجمن‌ها دسترسی کامل داشته باشید.



 
امتياز موضوع :
  • 0 رأي - معدل امتيازات : 0
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش توابع Qt قسمت پنجم
2004-08-11, 12:16 AM,
ارسال : #1
آموزش توابع Qt قسمت پنجم
فصل پنجم : Building Blocks

اين مثال چگونگي ساختن و اتصال بين چندين شيئ توسط سيگنالها و اسلاتها را و همچنين چگونگي مديريت رخداد تغيير اندازه را نشان مي دهد.
[ltr]
کد :
#include     <qapplication.h>
#include     <qpushbutton.h>
#include     <qslider.h>
#include     <qlcdnumber.h>
#include     <qfont.h>
#include     <qvbox.h>

class      MyWidget   :    public    QVBox;
{
    public :
        MyWidget ( QWidget   *parent = 0 , const   char    *name = 0 );
};

MyWidget::MyWidget ( QWidget    *parent , const   char   *name )  :  QVBox ( parent , name )
{
    QPushButton      *quit  =  new    QPushButton ( “Quit” , this , “ quit” );
quit -> setFont ( QFont ( “Times” , 18 , QFont::Bold ) );
connect ( quit , SIGNAL ( clicked ( ) ) , qApp , SLOT ( quit ( ) ) );
QLCDNumber     *lcd   =   new     QLCDNumber ( 2 , this , “lcd” );
QSlider     *slider = new      QSlider ( Horizontal , this , “slider” );
Slider -> setRange ( 0 , 99 );
Slider -> setValue ( 0 );
connect ( slider , SIGNAL ( valueChanged ( int ) ) , lcd , SLOT ( display ( int ) ) );
}

int     main ( int     argc, char    **argv )
{
    QApplication       a( argc , argv );
    MyWidget     w;
    a.setMainWidget ( &w );
    w.show ( );
return     a.exec( );
}
[/ltr]
بررسي خط به خط برنامه :
[ltr]
کد :
#include     <qapplication.h>
#include     <qpushbutton.h>
#include     <qslider.h>
#include     <qlcdnumber.h>
#include     <qfont.h>
#include     <qvbox.h>
[/ltr]
سه فايل ضميمه جديد اينجا اضافه شده اند. qslider.h و qlcdnumber.h بخاطر اينكه از دو شيء جديد يعني QSlider و QLCDNumber استفاده كرده ايم. qvbox.h نيز بخاطر اينكه از سيستم پشتيباني خودكار طرح Qt (Qt’s automatic layout support) استفاده مي كنيم.
[ltr]
کد :
class      MyWidget   :    public    QVBox;
{
    public :
        MyWidget ( QWidget   *parent = 0 , const   char    *name = 0 );
};

MyWidget::MyWidget ( QWidget    *parent , const   char   *name )  :  QVBox ( parent , name )
{
[/ltr]
حالا MyWidget به جاي QWidget از QVBox مشتق شده است.ازآنطريق ما از طرح QVBox ( كه تمام اشياء فرزند خود را درون خود بصورت عمودي قرار مي دهد) استفاده مي كنيم. عمل تغيير اندازه بطور خودكار توسط QVBox و همچنين حالا توسط MyWidget مديريت مي گردد.
[ltr]
کد :
    QLCDNumber      *lcd = new    QLCDNumber ( 2 , this , “lcd” );
[/ltr]
lcd يك QLCDNumber است، يك شيء كه اعداد را شبيه مد LCD نمايش مي دهد.اين نمونه براي نمايش دو عدد تنظيم شده و فرزندي از اشاره گر this مي باشد كه با “lcd” نامگذاري شده است.
[ltr]
کد :
    QSlider     * slider  = new     QSlider ( Horizontal , this , “slider” );
    slider -> setRange ( 0 , 99);
    slider -> setValue ( 0 );
[/ltr]
QSlider يك اسلايدر(كشوي لغزنده) كلاسيك است. كاربر مي تواند ازشيء براي كشاندن چيزي جهت تنظيم كردن يك مقدار عددي دريك محدوده استفاده كند.
اينجا ما عمودي آنرا ساخته ايم، محدوده آنرا به 99-0(براي دانستن مقادير درست به مستندات QSlider:ConfusedetRange( ) مراجعه كنيد) تغيير داده مقدار اوليه آنرا صفر قرار داده ايم.
connect ( slider , SIGNAL ( valueChanged ( int ) ) , lcd , SLOT ( display ( int ) ) );
در اينجا ما از مكانيسم سيگنال/اسلات براي اتصال valueChanged( ) متعلق به اسلايدر، به اسلات display( ) از LCDNumber استفاده نموده ايم.زماني كه مقداراسلايدر تغيير كرد، مقدار جديد را با صادر كردن توسط سيگنال valueChanged( ) منتشر مي كند. هنگامي كه سيگنال منتشر شد اسلات display ( ) فراخواني مي گردد، زيرا سيگنال به اين اسلات متصل شده است. هيچ يك از اين دو شيء يكديگر را نمي شناسند. اين موضوع در برنامه نويسي مبتني بر مؤلفه مهم است. اسلاتها از طرفي ديگر تابع عضو معمولي C++ هستند و از قوانين دسترسي معمول C++ پيروي مي كنند.

عملكرد برنامه :
LCDNumber هركاري كه شما با اسلايدر مي كنيد را بازتاب مي كند، و شيء تغيير اندازه را به خوبي مديريت مي كند. بايد توجه داشت كه اندازه شيء LCDNumber نيز در هنگام تغيير اندازه پنجره تغيير مي كند(بخاطر اينكه مي تواند) ، ولي بقيه در همان حالت باقي مي مانند ( بخاطراينكه ازطرفي نادان هستند ) .

تمرينات :
سعي كنيد LCDNumber را براي اضافه كردن اعداد بيشتر و يا تغيير حالت آن عوض كنيد. حتي شما مي توانيد چهار دكمه فشاري ديگر را نيز براي تعيين عدد پايه اضافه كنيد. همچنين شما مي توانيد محدوده اسلايدر را تغيير دهيد. آيا ممكن است استفاده از QSpinBox از اسلايدر بهتر باشد؟ سعي كنيد برنامه را طوري تغيير دهيد كه هرگاه LCDNumber از حد خود تجاوز كرد برنامه خارج گردد.
حالا شما براي فصل ششم آماده هستيد.
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-11, 12:23 AM,
ارسال : #2
 
خسته نباشيــــــــــــــــــــــــد...
(البته هنوز نخوندم)..
اگر تصاوير را هم ميگذاشتين عالي بود..

لطفا قبل از اينکه سؤالات خود را در انجمن مطرح کنيد،‌حتما قوانين انجمن‌ها را مطالعه فرماييد.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-11, 12:58 AM,
ارسال : #3
 
با عرض سلام خدمت آقای mkargar عزیز.
در دفعات بعد حتما تصاویر مربوطه را نیز قرار می دهم.
ازاینکه توجه کردبد متشکرم.
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-11, 12:19 PM,
ارسال : #4
 
آقا کلاس کاریت خیلی بالاست :wink:

<start> You hit Root. Root hits you. Root sends you TERM signal. You barely survive. Root sends you KILL signal. You die. --more-- </end>
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-11, 01:56 PM,
ارسال : #5
 
:oops: :?: :mrgreen:
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-11, 02:32 PM,
ارسال : #6
 
نيك است آنكه حاصل زحمت به ديكران****با خنده بيشكش كند و مزد را رها
اين تحفه را از من قبول كنيد
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-11, 02:54 PM,
ارسال : #7
 
:oops: :wink:
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ


رفتن به انجمن :


کاربران در حال مشاهده موضوع : 1 مهمان