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



 
امتياز موضوع :
  • 0 رأي - معدل امتيازات : 0
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش توابع Qt قسمت چهارم
2004-08-09, 12:30 AM,
ارسال : #1
آموزش توابع Qt قسمت چهارم
فصل چهارم : Let There Be Widgets

اين مثال چگونگي ساختن اشياء خودمان را نشان مي دهد، چگونگي كنترل كمترين و بيشترين اندازه يك شيء را شرح داده و نامهاي اشياء را معرفي مي نمايد.
[ltr]
کد :
#include    <qapplication.h>
#include    <qpushbutton.h>
#include    <qfont.h>

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

MyWidget::MyWidget ( QWidget  *parent , const  char  *name )   :  QWidget ( parent , name )
{
    setMinimumSize ( 200 , 120 );
    setMaximumSize ( 200 , 120 );
    QPushButton   *quit = new   QPushButton ( “Quit” , this , “quit” );
    quit -> setGeometry ( 62 , 40 , 75 , 30 );
quit -> setFont ( QFont ( “Times” , 18 , QFont::Bold ) );
connect ( quit , SIGNAL ( clicked( ) ) , qApp , SLOT ( quit( ) ) );
}

int    main( int   argc , char   **argv )
{
    QApplication    a( argc , argv );
    MyWidget    w;
    w.setGeometry ( 100 , 100 , 200 , 120 );
    a.setMainWidget ( &w );
    w.show( );
    return    a.exec( );
}
[/ltr]
بررسي خط به خط برنامه :
[ltr]
کد :
class   MyWidget   :   public   QWidget
{
    public :
        MyWidget ( QWidget   *parent = 0 , const  char  *name = 0 );
};
[/ltr]
دراينجا ما يك كلاس جديد ساخته ايم. كلاس جديد يك شيء است و ممكن است يك پنجره در بالاترين سطح ويا يك شيء فرزند باشد(همانند دكمه فشاري در فصل سوم) ، زيرا اين كلاس QWidget را به ارث مي برد. اين كلاس تنها يك عضو دارد، يك سازنده ( اضافه بر اعضاء QWidget را به ارث مي برد) . سازنده يك سازنده شيء استاندارد Qt مي باشد.معمولا شما هنگامي كه يك كلاس تعريف مي كنيد بايد يك سازنده شبيه به اين به كلاس خود اضافه كنيد. اولين آرگومان بيانگر شيء والد مي باشد.براي ساختن يك پنجره در بالاترين سطح بايد به متغيير parent مقدار اشاره گر نول(null pointer) را اختصاص دهيد.همچنانكه مي بينيد، اين شيء قرار است كه يك پنجره در بالاترين سطح باشد. آرگومان دوم نام شيء است.اين همان متني كه در قسمت بالاي پنجره نوشته مي شود و يا روي يك دكمه نمي باشد. اين يك نام وابسته به يك شيء جهت امكان مراجعه به آن در بعداز تعريف است ، و دراينجا همچنين يك تابع اشكالزدايي دستي وجود دارد كه سلسله مراتب كامل شيء را ليست مي كند.
[ltr]
کد :
MyWidget::MyWidget ( QWidget  *parent , const   char  *name )  :  QWidget ( parent , name )
[/ltr]
پياده سازي سازنده دراينجا آغاز مي شود. مانند بيشتر اشياء، اين سازنده تنها مقادير parent و name را به سازنده QWidget ارسال مي كند.
[ltr]
کد :
{
    setMinimumSize ( 200 , 120 );
    setMaximumSize ( 200 , 120 );
[/ltr]
بخاطر اينكه اين شيء نمي داند كه چگونه تغيير اندازه خود را مديريت كند، ما اندازه آنرا با تنظيم كردن مقادير كمترين و بيشترين بصورت مساوي، ثابت مي كنيم. در فصل بعدي ما نشان خواهيم داد كه چگونه يك شيء مي تواند به رخداد تغيير اندازه از طرف كاربر پاسخ دهد.
[ltr]
کد :
    QPushButton    *quit = new    QPushButton ( “Quit” , this , “quit” );
quit -> setGeometry ( 62 , 40 , 75 , 30 );
quit -> setFont ( QFont ( “Times” , 18 , QFont::Bold ) );
[/ltr]
در اينجا ما يك شيء والد از اين شيء (QPushButton) ساخته ايم (والد شيء جديد اشاره گر this است) كه نام آن “quit” مي باشد.نام شيء هيچ ربطي به متن روي دكمه ندارد، در اينجا به اتفاق يكسان هستند.
توجه كنيد كه quit يك متغير محلي در سازنده است. MyWidget مديريت آنرا بدست نمي گيريد، ولي Qt چرا و هنگامي كه MyWidget حذف شد بصورت پيش فرض از حافظه حذف مي گردد.به اين خاطر است كه MyWidget به سازنده نياز ندارد (از طرفي ديگر، حذف يك شيء فرزند آسيب و ضرري نمي رساند، شيء فرزند به صورت خودكار در رابطه با مرگ قريب الوقوع خود به Qt خبر مي دهد) . فراخواني setGeometry( ) كاري شبيه به توابع move( ) و resize( ) در فصل قبل انجام مي دهد.
[ltr]
کد :
connect     ( quit , SIGNAL ( clicked( ) ) , qApp , SLOT ( click ( ) ) );
[/ltr]
بخاطر اينكه MyWidget در باره شيء برنامه (application Object ) چيزي نمي داند، آنرا به اشاره Qt يعني qApp متصل كرده است. يك شيء يك مؤلفه نرم افزاري است و بايد حداقل اطلاعات ممكن را از محيط خود داشته باشد و عموما و در حقيقت درحد ممكن قابل استفاده مجدد باشد. دانستن نام شيء برنامه اين قاعده را نقض خواهد كرد، بنابراين Qt يك نام مستعاريعني qApp را ارائه مي دهد،براي چنين مواقعي كه مؤلفه اي نياز دارد تا به شيء برنامه اشاره كند.
[ltr]
کد :
int     main ( int   argc , char   **argv )
{
    QApplication    a ( argc , argv );
    MyWidget    w;
    w.setGeometry ( 100 , 100 , 200 , 120 );
    a.setMainWidget ( &w );
    w.show ( );
return       a.exec( );
}
[/ltr]
در اينجا ما مستقيما و فرزند جديدمان را معرفي كرده ايم، آنرا به عنوان شيء اصلي معرفي و برنامه را اجرا نموده ايم.

عملكرد برنامه :
اين برنامه از نظر عملكرد به برنامه قبلي بسيار شبيه است. تفاوت در روش پياده سازي آن واقع شده است، بنابراين كمي متفاوت عمل مي كند. تنها سعي كنيد اندازه آنرا تغيير دهيد تا تفاوت را مشاهده نماييد.

تمرينات :
سعي كنيد كه در تابع main( ) يك MyWidget ديگر درست كنيد. چه اتفاقي مي افتد؟
سعي كنيد دكمه هاي بيشتري يا اشيائي ديگر به برنامه اضافه كنيد.
حالا شما براي فصل پنجم آماده هستيد.
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-09, 11:10 AM,
ارسال : #2
 
آلن جان...
آقا اينها را توي بخش مقالات سايت قرار دهيد....
در ضمن ...
آقا xigmacorporation باز هم دست شما درد نکنه...

لطفا قبل از اينکه سؤالات خود را در انجمن مطرح کنيد،‌حتما قوانين انجمن‌ها را مطالعه فرماييد.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-10, 12:06 AM,
ارسال : #3
 
خواهش می کنم.
وظیفه است.
امیدوارم که بدرد عزیزان بخوره. :wink:
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-10, 01:17 AM,
ارسال : #4
 
از حضور پرشور شما در این سایت کمال تشکر را دارم .
امیدوارم که همیشه موفق باشید

To Follow The Path
Look To The Master
Follow The Master
Walk With The Master
See Through The Master
Become The Master
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2004-08-10, 01:52 AM,
ارسال : #5
 
با عرض سلام دوباره.
آقای whitehat من شما و دیگر عزیزان این سایت را استادان و دوستان گرانبهای خودم می دونم. چون واقعا با صفا هستید. اینرو وظیفه خودم می دونم که حداقل کاری رو که می تونم برای شما عزیزان انجام بدم.
امیدوارم که مورد استفاده واقع شود.
باتشکر.
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ


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


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