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

نام تاپیک: معرفی اجمالی Graphics view Framework

  1. #1
    کاربر دائمی آواتار .:saeed:.
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    پست
    207

    Red face معرفی اجمالی Graphics view Framework

    با سلام خدمت دوستان عزیز
    در این تاپیک قصد دارم یکی از جالبترین مجموعه کلاس های کیوتی برای کار گرافیکی دو بعدی رو به صورت مختصر توضیح بدم.

    این کلاس طبق help کیوتی و مثالی که داره قدرت بالایی برای کار با تعداد زیادی از اشیاء داره. درسته اشیاء . در این فریم ورک هر چیزی که میخواید رسم کنید رو باید به چشم یه شی بهش نگاه کنید . که البته میتونه singal و slot هم داشته باشه.
    برای نمونه عکس یه بازی که با این مجموعه ساختم رو توی تصاویر ضمیمه میتونین ببینین


    خوب شروع میکنیم.


    در برنامه نویسی گرافیکی ( در این آموزش ها فقط دو بعدی منظوره ، برا سه بعدی کیوتی با اپن جی ال جوابگو هست ) شما با سه مفهوم کلی و مهم روبرو هستید .

    1.سن Scene
    2.view
    3.item

    1.Scene
    سن رو مثل یه صفحه کاغذ فرض کنید یا بهتر بگم یه چرک نویس که طرح اولیه تون رو روی اون میکشین . در واقع سن یه مفهوم logical هست نه physical

    2.Item
    ایتم ها همون اشیایی هستند که رو سن اونارو رسم می کنین.

    3.view
    حالا که Item ها تون رو روی سن کشیدید اونو با یه view به صورت فیزیکی نمایش می دین.
    پس scene شد نقشه ما ، items شدند اشیای درون نقشه ما و view شد خانه ساخته شده از نقشه.
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله .:saeed:. : چهارشنبه 23 تیر 1389 در 00:20 صبح

  2. #2
    کاربر دائمی آواتار .:saeed:.
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    پست
    207

    نقل قول: معرفی اجمالی Graphics view Framework

    خوب حالا می ریم سراغ برنامه نویسی
    اول سن ها

    برای کار با سن نیازه که فایل QGraphicsScene رو include کنید


    QGraphicsScene::QGraphicsScene ( const QRectF & sceneRect, QObject * parent = 0 )



    من معمولا برای ساختن یه سن از سازنده بالا استفاده می کنم.
    خوب یه چیزی بالا نامفهومه اونم sceneRect هستش .
    اولا نوع این پارامتر مهمه که از نوع QRectF هستش . QRectF مشخص کننده یه مستطیل هستش و اون F پایانی اش به این دلیله که توی این فریم ورک مختصات به صورت float بیان میشه نه int
    این پارامتر مشخص کننده محدوده scene شما خواهد بود که بعد view از اون برای رندر کردن اشیاء موجود در این مستطیل استفاده میکند.
    اگه هم دوست ندارین میتونین مستطیل سن رو مشخص نکنید . اون وقت با توجه به ایتم هایی که به سن اضافه کردین خود سن بزرگترین مستطیل ممکن رو برای سن رکت تعیین می کنه.

    پس کد کامل به این صورته:


    QGraphicsScene *scene = new QGraphicsScene( QRectF(0,0,200,200 );


    کد بالا یه سن به ابعاد 200px در 200px ایجاد میکنه.
    0 و 0 اون موجود در QRectF هم نقطه مبدا رو مشخص میکنه . یعنی اینکه بعد که قراره ما این سن رو با یه view نمایش بدیم ، و view یه widget هستش ، نقطه 0,0 سن با نقطه 0و0 در view منطبق هستش . برای درک بهتر اگه ما به جای صفر و صفر در Qrectf ده و ده می گذاشتیم ، اون وقت نقطه صفر وصفر view ( گوشه بالا سمت چپ ) با مختصات ده و ده سن منطبق می شد. ( مهم نیست اگه نفهمیدین )

  3. #3
    کاربر دائمی آواتار .:saeed:.
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    پست
    207

    نقل قول: معرفی اجمالی Graphics view Framework

    خوب حالا view
    اون include کنید QGraphicsView را !

    این قسمت زیاد دردسر نداره

    QGraphicsView view( &scene );
    view.show();


    همین ! scene هم همون سنی بود که قبلا ساختی.

  4. #4
    کاربر دائمی آواتار .:saeed:.
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    پست
    207

    نقل قول: معرفی اجمالی Graphics view Framework

    و اما ایتم ها




    Qt خداراشکر چند آیتم آماده و به قول معروف primitive داره مثل دایره ، مستطیل و ...
    Scene چند تا تابع برای اضافه کردن این ایتم ها به خودش داره مثلا :



    QGraphicsEllipseItem * addEllipse ( const QRectF & rect, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

    QGraphicsEllipseItem * addEllipse ( qreal x, qreal y, qreal w, qreal h, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

    QGraphicsLineItem * addLine ( const QLineF & line, const QPen & pen = QPen() )
    QGraphicsLineItem * addLine ( qreal x1, qreal y1, qreal x2, qreal y2, const QPen & pen = QPen() )

    QGraphicsPathItem * addPath ( const QPainterPath & path, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

    QGraphicsPixmapItem * addPixmap ( const QPixmap & pixmap )

    QGraphicsPolygonItem * addPolygon ( const QPolygonF & polygon, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

    QGraphicsRectItem * addRect ( const QRectF & rect, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

    QGraphicsRectItem * addRect ( qreal x, qreal y, qreal w, qreal h, const QPen & pen = QPen(), const QBrush & brush = QBrush() )

    QGraphicsSimpleTextItem * addSimpleText ( const QString & text, const QFont & font = QFont() )

    QGraphicsTextItem * addText ( const QString & text, const QFont & font = QFont() )


    می تونید هم اول یه ایتم رو جدا گونه بسازید و بعد با تابع addItem سن اونارو به سن اضافه کنید. ایتم های دلخواه رو هم میتونید خودتون بسازید که بعدا بحث می کنیم.

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

  5. #5
    کاربر دائمی آواتار .:saeed:.
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    پست
    207

    نقل قول: معرفی اجمالی Graphics view Framework

    اینم یه نمونه ساده


    #include
    <QtGui/QApplication>
    #include<QGraphicsItem>
    #include<QGraphicsView>
    #include<QGraphicsScene>
    intmain(intargc, char *argv[])
    {
    QApplicationa(argc, argv);
    QGraphicsScenescene( 0, 0, 100, 30 );
    scene.addEllipse( -20, -10, 100, 30 );
    QGraphicsViewview( &scene );
    scene.addSimpleText("Hello World!");
    view.show();
    returna.exec();
    }

    عکس های ضمیمه عکس های ضمیمه

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

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