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

نام تاپیک: ترجمه Model/View Programming

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

    Post ترجمه Model/View Programming

    لازم مي دونم قبل از خواندن ترجمه من اين توضيحاتي را كه از جستجو در اينترنت پيدا كردم مطالعه كنيد تا آمادگي قبلي براي درك مفهوم MVC داشته باشيد چون بي شك ترجمه من خيلي پيچيده تر از اين توضيحات اجمالي هست . موفق باشيد .
    ابتدا دانلود مقاله مفيد از همين سايت
    در مرحله بعد خواندن متن زير كه از اين سايت برداشتمش:
    طراحان نرم افزار هنگام معماری سیستم های نرم افزاری الگوهای مختلفی را برای پیاده سازی ساختار نرم افزار در پیش می گیرند. یکی از این الگوهای معماری نرم افزار MVC یا Model View Controller نام دارد.
    MVC نرم افزار را به سه قسمت Model و View و Controller تقسیم می کند. که هر کدام از این سه قسمت وظیفه خاصی را در چرخه حیات نرم افزار بازی می کنند.


    • Model
      مفاهیم استفاده شده در نرم افزار تحت عنوان Model ها ایجاد می شوند. در MVC هریک از Class های ما یک Model هستند. Model در Logic برنامه هیچ نقشی ندارد. ارتباط با پایگاه داده هم در Model صورت می گیرد و Model ها پل ارتباطی بین نرم افزار و پایگاه داده نیز هستند.
    • View
      View رابط کاربری نرم افزار است و می توان گفت فرم های نرم افزار و تمام چیزهایی که کاربر با آنها در ارتباط است تحت عنوان View در نرم افزار قرار می گیرد. View نیز هیچ نقشی در Logic نرم افزار ندارد و تنها پل ارتباطی بین کاربر و سایر بخش های نرم افزار است. تاکید می کنم که View هیچ تصمیم گیری انجام نمی دهد و فقط نمای بیرونی نرم افزار است.
    • Controller
      Controller ها قلب تپنده نرم افزارهای MVC هستند. تمام تصمیم گیری ها و Logic نرم افزار در Controller قرار می گیرد و Controller پل ارتباطی Model و View است. در واقع با بیانی ساده می توان گفت Controller تصمیم می گیرد که چه داده ای از کدام Model دریافت شود و جهت نمایش به کدام View ارسال شود.

    حالا این سوال به وجود می آید که چرا چنین ساختاری می تواند خوب باشد. چه کمکی به تیم طراحی و توسعه نرم افزار می کند؟
    در پاسخ به این سوال می توان به چند دلیل زیر اشاره کرد:

    1. MVC توسعه نرم افزار را تبدیل به گلابی یا هولو می کند.
    2. MVC پروسه Unit testing را بسیار راحت می کند.
    3. MVC کار گروهی همزمان را برای تیم طراح و برنامه نویس آسان می کند.
    4. MVC با جدا سازی Logic از View و قرار دادن آن در Controller خوانایی کدها را بسیار بالا می برد.
    5. و مهم تر از همه اینکه MVC به شکل شگفت انگیزی حجم کد نویسی را کاهش می دهد.

    MVC در هر زبان برنامه نویسی قابل پیاده سازیست. حتی در جاوا اسکریپت. اما در حال حاضر از این روش بیشتر برای زبان های سمت سرور مثل PHP و ASP.Net استفاده می شود و در کل MVC یک روش بسیار کارا برای تیم های بزرگ تر است. هرچه تیم بزرگتری داشته باشید مزایای این الگو برای شما بیشتر ملموس خواهد بود. همچنین به تجربه می گویم MVC برای پیاده سازی پروژه های کوچک توصیه نمیشود و من استفاده از این روش در پروژه های کوچک را به استفاده از پتک برای کشتن پشه تشبیه می کنم.
    ------------------------------------------------------------------------------------------------------------------------
    سلام ترجمه بهتر از ترجمه گوگل از Model/View Programming
    Qt 4 يك مجموعه جديد از كلاس هاي نمايش آيتم معرفي مي كند يك معماري model/view به مديريت رابط بين داده ها را به كاربر ارائه ميدهد. اين جدايي بين قابليت ها معرفي شده توسط اين معماري به توسعه دهنگان براي سفارشي كردن آيتم ها و فراهم كردن يك استاندارد رابط مدل كه اجازه مي دهد طيف وسيعي از منابع داده به كاربرده شده به معرض مشاهده در آيد انعطاف پذيري بيشتري مي دهد. در اين سند ما يك مختصر توضيح درباره نمونه اي از model/view مي گيريم. به طور كلي اين مفاهيم درگير و توضيح اين معماري سيستم نمايش آيتم هر اجزايي در اين معماري توضيح داده شده و مثال هايي هستند كه نشان مي دهد چطور كلاس هاي ارائه شده را به كار ببريم.

    معماري model/view
    model/view/controller(MVC) يك الگوي طراحي نشات گرفته از Smalltalk كه غالبا در ساختمان رابط كاربري استفاده مي شود. در الگوهاي طراحي گاما و همكاران.نوشته :
    MVC شامل سه نوع از اشياع است. Model شي اپليكيشن، view ارائه صفحه نمايش هست، و تعريف كنترلر كه راهي است كه رابط كاربري به ورودي كاربر واكنش نشان دهد. طرح هاي رابط كابري تمايل به داشتن توده اين شي ها با هم دارد. MVC تنها به آنها انعطاف پذيري بيشتر و استفاده مجدد مي دهد.
    آن جملاتي را كه فكر مي كنيد اشتباه ترجمه كردم لطفا درست ترجمه كنيد و از طريق پيام خصوصي براي من ارسال كنيد تا مطلب را ويرايش كنم. ممنون
    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 03:25 صبح دلیل: معماري model/view

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

    نقل قول: ترجمه Model/View Programming

    اگر اشياء View و Controller تركيب شده هستند، نتيجه معماري model/view هست. اين راه جدايي كه داده ذخيره شده از اين راه به كاربر ارائه مي شود، اما يك چارچوب ساده پايه روي همان اصول فراهم شده .اين جدايي آن را براي نمايش داده در چندين view متفاوت امكان پذير مي سازد(منظورش اينه كه لازم نيست يك رويداد را براي همه كنترل ها جدا برنامه نويسي كنيم ! يك بار برنامه نويسي مي كنيم آنوقت براي همه كنترل ها استفاده مي كنيم).و اجراي نوع جديدي از نمايش ها(View)، بدون تغيير اساسي ساختمان داده. براي اجازه دادن دسترسي انعطاف پذير به كاربر،ما مفهوم نماينده يا همان دليگيت را معرفي مي كنيم(منظور از دليگيت همان كنترلر هست) .مزيت داشتن يك نماينده در اين چارچوب اينست كه اجازه مي دهد راهي را براي سفارشي كردن و ويرايش آيتم هاي داده ارائه شده.

    معماري model/view
    اين مدل با منبع داده ارتباط برقرار مي كند و يك رابط براي ديگر اجزاء در اين معماري فراهم مي كند. اين طبيعت ارتباط برقرار كردن بستگي به نوع منبع داده و مدل اجرا شده دارد. راهنما يا شاخص مدل را از اين مدل به دست مي آوريم; اينها منابع آيتم هاي داده هستند. توسط شاخص مدل از مدل تهيه شده اند، view مي تواند آيتم هاي داده را از منابع داده بازيابي كند. در viewهاي استاندارد يك نماينده يا دليگيت آيتم هاي داده را ارائه مي دهد.زماني كه يك آيتم ويرايش شود يك نماينده با مدل با استفاده از شاخص مدل ارتباط مستقيم برقرار مي كند.

    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 03:33 صبح

  3. #3

    نقل قول: ترجمه Model/View Programming

    اين مدل ارتباط برقرار مي كند با منبع داده،فراهم مي كند يك رابط براي ديگر اجزاء در اين معماري
    تلاشت رو بیشتر کنی میتونی ترجمه سلیس تری ارائه بدی
    موفق باشی

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

    نقل قول: ترجمه Model/View Programming

    به طور كلي ، كلاس هاي model/view مي توان به سه گروه بالا توصيف كرد:model , View و Delegates. هر كدام از اين اجزاء توسط كلاس هاي مجرد تعريف شده اند كه رابط هاي عمومي يا اشتراكي و در بعضي موارد به طور پيش فرض پياده سازي ويزگي ها فراهم مي آورند.كلاس هاي مجرد به معناي subclassed(زير طبقه بندي شده) هستند در ترتيب تمام مجموع قابليت ها انتظار رفته توسط ديگر اجزاء ارائه مي شود; همچنين اجازه مي دهد اجزاء تخصصي نوشته شوند.

    Model/view و Delegates ارتباط برقرار مي كنند با يكديگر با استفاده از سيگنال ها و اسلات ها:
    - سيگنال ها درباره تغييرات view درباره داده برگزار شده توسط منبع داده به model اطلاع مي دهند .
    - سيگنال ها از view اطلاعات را ارائه مي دهند درباره فعل و انفعالات(تعامل) كاربر با آيتم هاي نمايش داده شده.
    - سيگنال ها از دليگيت در طي ويرايش(آپديت تغييرات داده ها) براي ارتباط بين model و view درباره چگونگي حالت ويرايشگر(چگونگي انجام تغييرات) استفاده مي كنند.
    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 03:40 صبح

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

    نقل قول: ترجمه Model/View Programming

    Models تمام آيتم هاي مدل بر اساس كلاس QAbstractItemModel هستند. اين كلاس يك رابط كه استفاده مي شود توسط Viewها و Delegateها براي دسترسي به داده تعريف شده است. اين داده خود نمي تواند در مدل ذخيره شود; آن مي تواند در يك ساختار داده يا مخزن ارائه شده توسط كلاس جدا،يك فايل،يك ديتابيس، يا ديگر كامپوننت هاي اپليكيشن ارائه شود.

    اين مفاهيم پايه محيط مدل ها در بخش ModelClasses ارائه شده است.

    QAbstractItemModel يك رابط به ديتا فراهم مي كند كه انعطاف پذيري كافي براي بكاربردن viewها مخزن در فرم جداول ، ليست ها و شاخه هاي درختي هست.اما زماني كه مدل هاي جديد براي ليست و جدول هايي شبيه ساختمان داده اجرا مي شوند، كلاس هاي QAbstractListModel و QAbstractTableModel نقاط شروع بهتر هستند زيرا آنها پياده سازي توابع عمومي پيشفرض مناسبي فراهم مي كنند. هر كدام از اين كلاس ها مي تواند مدل هاي subclassed فراهم كند كه پشتيباني انواع تخصصي ليست ها و جداول را انجام دهند.
    مبحث مدل هاي subclasseing در بخش Creating New Models مورد بحث قرار گرفته است.


    Qt برخي مدل هاي ready-made(از قبل ساخته شده) فراهم مي كند كه مي تواند آيتم هاي ديتا را به كار ببرد:
    QStringListModel براي ذخيره ساده ليست هاي QString به كاربرده شده.
    QStandardItemModel بيشتر ساختمان درختي آيتم ها را مديريت مي كند ، هر كدام از اين آيتم ها محتواي دلخواه داده را دارند.
    QFileSystemModel اطلاعاتي درباره فايل ها و دايركتوري هاي كه در محل هايي در سيستم بايگاني شده اند فراهم مي كند.
    QSqlQueryModel ، QSqlTableModel و QSqlRelationalTableModel براي دسترسي به ديتابيس براساس قرار داد Model/View به كاربرده شده است.

    اگر مدل هاي استاندارد نيازهاي شما را برآورده نكرد، شما مي توانيد با subclass QAbstractItemModel ، QAbstractListModel or QAbstractTableModel مدل هاي سفارشي خودتان را ايجاد كنيد.
    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 03:47 صبح

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

    نقل قول: ترجمه Model/View Programming

    Views
    پياده سازي هاي كامل براي انواع مختلف Viewها ارائه مي دهند: QListView نمايش ليست آيتم، QTableView نمايش داده هاي از يك مدل در جدول ، و QTreeView آيتم هاي مدل از ديتا را در ليست سلسله مراتبي نمايش مي دهد. كلاس پايه هر يك از اين كلاس ها، كلاس QAbstactItemView مي باشد. هرچند اين كلاس ها آماده براي استفاده يا پياده سازي هستند ، آن ها همچنين مي توانند Subclassed ارائه دهند براي viewهاي سفارشي. Viewهاي در دسترس در بخش View Classes بررسي شده اند.

    Delegateها
    QAbstractItemDelegate يك كلاس مجرد پايه براي Delegateها در چارچوب Model/View هست. پس از Qt 4.4، به طور پيش فرض پياده سازي دليگيت توسط QStyledItemDelegate ارائه مي شود و اين دليگيت پيشفرض توسط استاندارد View كيوت استفاده مي شود. اما QStyledItemDelegate و QItemDelegate مستقل ديگر هستند كه براي رسم و ويرايش آيتم View مي باشند.تفاوت بين آنها اين است كهQStyleItemDelegate از جريان استايل براي رسم آيتم ها استفاده شده است.از اين رو ما به شما توصيه مي كنيم تا از QStyledItemDelegate به عنوان كلاس پايه براي زمان دليگيت هاي سفارشي يا زمانيكه همراه Qt Style Sheet كار مي كنيد استفاده كنيد. درباره دليگيت ها در بخش Delegate Classes توضيح داده شده.
    آخرین ویرایش به وسیله complexcoding : دوشنبه 16 بهمن 1391 در 14:33 عصر

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

    نقل قول: ترجمه Model/View Programming

    sorting(مرتب سازي)
    دو راه نزديك شدن به مرتب سازي در معماري Model/View وجود دارد; انتخاب هر كدام از اين رويكردها بستگي به مدل اساسي شما دارد اگر مدلتان را جوركرده ايد، i.e ، اگر تابع QAbstractItemModel::sort() را دوباره اجرا كرده ايد، هر دو QTableView و QTreeView يك API مي دهد كه اجازه مرتب كردن داده هاي مدلتان را فراهم مي كند. سيگنال به QTableView::sortyByColumn() اسلات يا QTreeView::sortByColumn() اسلات ، به ترتيب.

    رويكرد ديگر ، اگر مدل شما رابط ضروري ندارد يا اگر شما از ليست مشاهده براي ارائه دادن داده هايتان استفاده مي كنيد. استفاده از نماينده مدل به دگرگون كردن ساختار مدل شما قبل از ارائه داده در View هست.اين قسمت ها در بخش Proxy Models پوشش داده شده است (اينجا منظورش اينه كه اگر شما فقط مي خواهيد داده هايتان را خواندني كنيد ديگر لازم نيست از كنترلر استفاده كنيد چون كنترلر يا ديليگيت يا همان نماينده براي كنترل ورودي مي باشد).
    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 03:55 صبح

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

    نقل قول: ترجمه Model/View Programming

    Convenience classes
    تعدادي از convenience classes از كلاس هاي استاندارد View براي بهره مندي برنامه هاي كاربردي كه بر مبتني بر آيتم هاي View و كلاس هاي جدول تكيه كرده اند مشتق شده اند. آنها به عنوان subclassed در نظر گرفته نيستند، اما مي توان بسادگي يك رابط آشنا معادل كلاس ها در Qt 3 ارائه شود. نمونه هايي از اين كلاس ها شامل QListWidget ، QTreeWidget و QTableWidget هستند; اينها مشابه رفتار كلاس هاي QListBox ، QListView و QTable در Qt 3 ارائه مي دهند.
    اين كلاس ها كمتر از كلاس هاي View انعطاف پذير هستند ، و نمي توانند از مدل هاي دلخواه استفاده كنند. ما توصيه مي كنيم كه شما از رويكرد Model/View براي مديريت داده استفاده كنيد مگر اينكه شما قويا به اقلام مبتني بر اين كلاس(item-based) احتياج داشته باشيد.اگر شما تمايل به داشتن مزيت ها و ويژگي هاي ارائه شده توسط رويكرد Model/View را داريد هنگاميكه هنوز از رابط item-based استفاده مي كنيد، با استفاده از كلاس هاي View در نظر بگيريد، اينطور بطوريكه QListView، QTableView و QTreeView همراه با QStandardItemModel.(يعني اگر حوصله كدنويسي نداريد مي توانيد از كلاس هاي QListWidget ، QTreeWidget و QTableWidget استفاده كنيد).
    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 03:59 صبح

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

    نقل قول: ترجمه Model/View Programming

    استفاده از Modeها و Viewها
    بخش هاي زير توضيح داده شده كه چطور از model/view استفاده مي شود. هر بخش شامل يك مثال و به دنبال آن نمايش مي دهد كه چطور يك اجزاء جديد ايجاد كنيد.

    دو مدل در كيوتي
    دو مدل استاندارد كه توسط كيوتي ارائه شده اند عبارتند از QStandardItemModel و QFileSystemModel. مدل QStandardItemModel يك مدل چند منظوره كه مي تواند تفاوت هاي ساختار داده ها را توسط ليست، جدول و نمايش درختي نشان دهد. اين مدل همچنين آيتم هاي داده را نگه مي دارد.QFileSystemModel اين مدل اطلاعات را درباره محتويات يك دايركتوري حفظ مي كند. به عنوان يك نتيجه آيتم هاي داده اي خود را نگه نمي دارد اما بسادگي فايل ها و دايركتوري ها را در مكان بايگاني در سيستم نشان مي دهد.QFileSystemModel يك مدل آماده براي استفاده و آزمايش را نشان مي دهد و به راحتي مي تواند با پيكربندي از داده هاي موجود استفاده كند.با استفاده از اين مدل ما مي توانيم نمايش دهيم كه چطور مدل را براي استفاده Viewهاي ساخته اجرا كنيم و ياد بگيريم كه چطوري داده ها را با استفاده از شاخص هاي مدل دستكاري كنيم.

    استفاده از Viewها با مدل هاي موجود
    كلاس هاي QListView و QTreeView بيشترين Viewهاي مناسب براي استفاده از QFileSystemModel هستند.اين مثال در زير نمايش محتواي يك دايركتوري را ارائه مي دهد. يك View درختي كه مقداري اطلاعات را در يك ListView نمايش مي دهد.آن قسمت View كه كاربر انتخاب كرده است به صورت برجسته يا روشن در View نمايش داده مي شود.


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

    نقل قول: ترجمه Model/View Programming

    ما QFileSystemModel را بطوري كه آماده باشد براي استفاده و ايجاد برخي Viewها براي نمايش محتواي دايركتوري ها اجرا مي كنيم . اين ساده ترين راه براي استفاده از يك مدل را نشان مي دهد. ساخت و استفاده از مدل انجام شده درون تابع تنها main()
       int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QSplitter *splitter = new QSplitter;

    QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath(QDir::currentPath());


    اين مدل براي استفاده از داده بعضي فايل هاي سيستم را اجرا مي كند. فرامي خواند setRootPath() كه اين يك فايل سيستم را براي View هدايت مي كند. ما ايجاد مي كنيم دو View را چنانچه كه آيتم هاي برگزار شده را از دو راه تعريف شده بررسي كرديم:

    QTreeView *tree = new QTreeView(splitter);
    tree->setModel(model);
    tree->setRootIndex(model->index(QDir::currentPath()));

    QListView *list = new QListView(splitter);
    list->setModel(model);
    list->setRootIndex(model->index(QDir::currentPath()));
    آخرین ویرایش به وسیله complexcoding : شنبه 21 بهمن 1391 در 04:03 صبح

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

    نقل قول: ترجمه Model/View Programming

    فعلا خسته شدم شايد ديگه ترجمه نكنم و شايد يكي دو روزي استراحت كنم

  12. #12

    نقل قول: ترجمه Model/View Programming

    فعلا خسته شدم شايد ديگه ترجمه نكنم و شايد يكي دو روزي استراحت كنم



    سلام
    خسته نباشی. واقعا این معماری model/view یکم برای برنامه نویسها زبانهای و فریم ورکهای دیگه عجیب هست. من خودم داخلش خیلی گیر کردم و هنوزم باهاش مشکل دارم. ترجمه کردن همچین مفهوم سختی هم میتونه کار رو سختر کنه. این عالی. ادامه بدی خوب میشه. فقط لازم نیست تمام جملات رو ترجمه کنی. سعی کن مفهومی رو که برداشت کردی ( البته با دقت ) ارائه کنی. اینجوری ترجمه خیلی بهتر میشه.

    موفق باشی.

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

    نقل قول: ترجمه Model/View Programming

    خبر خوش: ترجمه ها براي فهم بهتر اصلاح شدند.
    و در آخر اينم حاصل خواندن ترجمه هاي خودم هست حالا شما جدي نگيريد و ترجمه هاي من رو نخونيد!



    به اميد خدا انشاء الله از همين حالا ترجمه ها رو ادامه مي دم .
    آخرین ویرایش به وسیله complexcoding : یک شنبه 22 بهمن 1391 در 02:43 صبح

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

    نقل قول: ترجمه Model/View Programming

    viewها به صورت ديگر ويجت ها ساخته شده اند. محيط بالا يك ويو را همراه با آيتم ها كه مدل آن از تابع setModel() مي باشد را همراه با دايركتوري از آرگومان ها نمايش مي دهد. ما فيلتر ديتا را توسط مدل كه تابع setRootIndex را فراخواني مي كند روي هر View كه باشد، عرضه مي كنيم اين تابع يك شاخص مدل مناسب از مدل فايل هاي سيستم براي جريان دايركتوري را عبور مي دهد.

    تابع index() از يك مورد منحصر به فرد به نام QFileSystemModel استفاده مي كند; ما آن را همراه با يك دايركتوري و و آن را به صورت يك شاخص مدل تهيه مي كنيم. شاخص هاي مدل در Model Classes بحث شده اند.

    بقيه اين تابع نماش هاي ويوها را درون ويدجت جدا نمايش مي دهد و حلقه رويدادهاي اپليكيشن را اجرا مي كند:
    splitter->setWindowTitle("Two views onto the same file system model");
    splitter->show();
    return app.exec();
    }

    در مثال بالا ما اينكه چطور از آيتم هاي انتخاب شده استفاده كنيم صرف نظر كرديم. اين موضع با جزئيات بيشتر در بخش Handling Selections in Item Views پوشش داده شده است.

    كلاس هاي Model
    براي اينكه بررسي كنيم كه چطور انتخاب ها به كاربرده مي شوند، شما بايد بررسي مفيد ب استفاده كردن از چارچوب Model/View پيدا كنيد.

    مفاهيم پايه
    در معماري مدل/ويو ، Model يك رابط استاندارد كه Viewها و Delegateها از آن براي دسترسي داده به استفاده كنند فراهم مي كند. در Qt ، رابط استاندارد توسط كلاس QAbstractItemModel تعريف شده است.مهم نيست كه چقدر آيتم هاي داده در ساختار داده اصلي ذخيره شده باشند، همه مشتق شده هاي QAbstractItemModel محتواي داده ها را به صورت ساختار سلسله مراتبي يا جدول يا آيتم نشان مي دهند. ويوها از از قرارداد يا عرف دسترسي به آيتم هاي داده استفاده مي كنند، اما آنها در راهي كه اطلاعات راهي كه اطلاعات را به كاربر ارئه دهند محصور نيستند.


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

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

    نقل قول: ترجمه Model/View Programming

    شاخص هاي مدل براي اطمينان از اينكه داده هاي ارائه شده به صورت جداگانه از دسترسي ها ارائه شده اند، مفهوم Model Index معرفي شده است. هر قطعه از اطلاعات مدل به دست آورده را مي تواند از طريق شاخص مدل نشان داده.ويوها و دليگيت ها از شاخص ها براي نمايش آيتم هاي درخواست شده داده استفاده مي كنند.
    به عنوان نتيجه ، تنها بايد بدانيد كه اين مدل چگونه اطلاعات را به دست آورده است، و نوع داده توسط مدل مديريت مي شود كه نسبتا به طور كلي تعريف شده است.شاخص هاي مدل شامل يك اشاره گر است كه آنها را ايجاد مي كند و اين زماني كه با بيشتر از يك مدل كار كنيد مانع بر هم ريختگي مي شود .
    QAbstractItemModel *model = index.model();

    شاخص هاي مدل مرجع هاي موقت از قطعات اطلاعات فراهم مي كنند ، و مي توان داده رااز طريق مدل بازيابي يا اصلاح كرد.
    از آنجا كه مدل ها ممكن است ساختار داخلي خودشان را دوباره سازماندهي كنند، شاخص هاي مدل ممكن است نامعتبر بوده و ذخيره نشده باشند.
    اگر يك مرجع دراز مدت(Long-term) يك قطعه اطلاعات درخواست كرد، يك شاخص مدل مداوم و ماندگار بايد ايجاد شود. اين يك مرجع از اطلاعات فراهم مي كند.مدل ديتا را آپديت مي كند(up-to-data). شاخص هاي مدل زودگذر توسط كلاس QModelIndex فراهم مي شوند، و شاخص هاي مدل ماندگار توسط كلاس QPersistentModelIndex ايجاد مي شوند. براي به دست آوردن شاخص مدل مربوط به يك آيتم ديتا، سه خاصيت بايد در مدل تعيين شود: تعداد سطها ، تعداد ستون ها ، و شاخص مدل از آيتم پدر.بخش زير با جزئيات اين خواص رو توضيح داده و بررسي كرده.
    آخرین ویرایش به وسیله complexcoding : دوشنبه 23 بهمن 1391 در 05:01 صبح

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

    نقل قول: ترجمه Model/View Programming

    سطرها و ستون هادر ابتدايي ترين شكل ، يك مدل مي تواند بصورت يك جدول ساده كه هر كدام از آيتم هاي آن توسط تعدادي سطر و ستون مشخص شده اند در دسترس باشد. ولي اين به معني اينكه داده ها به صورت ساختار آرايه ذخيره شده اند نيست; استفاده از سطرها و ستون ها يك قرار داد هست تا فقط اجزاء با همديگر ارتباط برقرار كنند. ما مي توانيم اطلاعات را توسط هر آيتمي كه توسط سطرها و ستون هاي مدل براي ما تعيين شده بازيابي كنيم، و ما مي توانيم يك شاخص(Index) كه يك آيتم را نشان مي دهد دريافت كنيم.
    QModelIndex index = model->index(row, column, ...);

    مدل هايي كه رابط ساده را ارائه مي دهند ، تنها سطح ساختار مانند ليست ها و جداول احتياج به اطلاعات ديگري براي ارئه ندارند اما ، مانند كدهاي بالا نشان مي دهند، ما به تهيه اطلاعات بيشتري درباره به دست آوردن شاخص مدل احتياج داريم.

    سطرها و ستون ها
    اين دياگرام يك مدل جدول ابتدايي را كه هر آيتم آن توسط جفت هاي سطر و ستون مشخص شده اند نشان مي دهد. ما يك شاخص مدل كه به يك آيتم داده اشاره دارد را توسط عبور تعدادي سطر و ستون مربوط به مدل بدست مي آوريم.
    QModelIndex indexA = model->index(0, 0, QModelIndex());
    QModelIndex indexB = model->index(1, 1, QModelIndex());
    QModelIndex indexC = model->index(2, 1, QModelIndex());

    آيتم هاي سطح بالا در يك مدل هميشه مرجع آن توسط QModelIndex() تعيين شده اند. مانند آيتم پدر آنها. اين قسمت در بخش بعدي توضيح داده شده است.

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

    نقل قول: ترجمه Model/View Programming

    آيتم هاي پدر
    رابط جدول مشابه، آيتم داده را توسط مدل هاي دلخواه زماني كه ديتا را در يك جدول يا ليست ويو استفاده مي كنيم فراهم مي كند; شماره سطر و ستون نقشه سيستم دقيقا آيتم ها را نمايش مي دهد.اما ساختارهاي نمايش درختي انعطاف پذيري بيشتري براي درون رابط كابري خود دارد. به عنوان مثال ، هر آيتم مي تواند پدر آيتم ديگر باشد يعني زير گروه داشته باشد، يك آيتم بالاتر مي تواند محتواي خود را كه ليستي از آيتم ها هستند نشان دهد.
    زماني كه يك شاخص براي يك آيتم مدل درخواست مي كنيم، ما بايد برخي اطلاعات درباره آيتم هاي پدر را فراهم كنيم. خارج از مدل ، اين تنها راه براي مراجعه به آيتم از طريق شاخص مدل هست، بنابراين مدل شاخص پدر داده مي شود:
     QModelIndex index = model->index(row, column, parent);


    پدرها ، سطرها و ستون ها
    در شكل بالا يك مدل درختي نشان داده شده كه هر آيتم توسط آيتم اصلي يا پدر و سطر و ستون آن مراجعه مي شود. آيتم هاي A و C كه از يك آيتم پدر هستند نشان داده شده است:
    QModelIndex indexA = model->index(0, 0, QModelIndex());
    QModelIndex indexC = model->index(2, 1, QModelIndex());

    آيتم A تعدادي فرزند دارد.شاخص مدل براي آيتم B از كد زير به دست آمده است:
    QModelIndex indexB = model->index(1, 0, indexA);

    نقش آيتم ها
    آيتم ها در يك مدل مي توانند نقش هاي مختلفي براي اجزاء اجرا كنند، اجازه مي دهد انواع مختلف داده براي شرايط مختلف عرضه شود. براي مثال Qt::DisplayRole براي دسترسي يك رشته كه بتواند يك متن را در يك ويو نمايش دهد استفاده شده است.به طور معمول محتواي داده آيتم ها براي تعدادي نقش هاي متفاوت ، و وظايف استاندارد توسط Qt::ItemDataRole تعريف شده اند.
    ما مي توانيم از مدل براي داده هاي آيتم با عبور از شاخص مدل مربوطه به آيتم و توسط نقش هاي از قبل تعيين شده نوع داده هاي را كه مي خواهيم به دست بياوريم:
    QVariant value = model->data(index, role);

    نقش هاي آيتم
    وظيفه آيتم نوع داده اي را كه به آن مراجعه شده است نشان مي دهد.ويوها مي توانند نقشها يا وظايف را به روش هاي مختلف نشان دهند، بنابراين آنها براي تهيه اطلاعات مناسب براي هر نقش مهم مي باشند. بخش Creating New Models برخي كاربردهاي از قبل مشخص شده اين نقش ها را با جزئيات بيشتر.

  18. #18

    نقل قول: ترجمه Model/View Programming

    سلام اگه ممکنه این فایل پست اول رو همینجا آپلود کنین من از این لینکی که دادین نمیتونم دانلود کنم نمیخام توی سایتش اکانت ایجاد کنم
    ممنون

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

    نقل قول: ترجمه Model/View Programming

    نقل قول نوشته شده توسط armintirand مشاهده تاپیک
    سلام اگه ممکنه این فایل پست اول رو همینجا آپلود کنین من از این لینکی که دادین نمیتونم دانلود کنم نمیخام توی سایتش اکانت ایجاد کنم
    ممنون
    سلام لازم نيست اگه نمي توني دانلودش كني اشكالي نداره چون كلا 7 صفحه بود و شبيه به همون و بسي شيواتر و زيباتر در اولين پست با رنگ قهوه اي گذاشتم. اين هم يك توضيحات اضافه .

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

    نقل قول: ترجمه Model/View Programming

    بيشترين استفاده هاي عمومي يا رايج از آيتم هاي ديتا توسط Qt::ItemDataRole پوشش داده شده اند. براي تهيه آيتم هاي مناسب براي هر نقش ، مدل ها مي توانند با اشاره به ويوها و نماينده ها درباره اينكه چطور آيتم ها براي كابر ارائه شوند تعيين كننده باشند.انواع مختلف ويوها آزادي كامل در زمينه نمايش(تفسير اطلاعات) يا چشم پوشي از اطلاعات ضروري دارند. همچنين مي تواند نقش هاي اضافي براي هدف هاي خاص را تعريف كند.

    خلاصه
    - شاخص هاي مدل اطلاعات ويوها و دليگيت ها را درباره مكان قرارگيري آيتم هاي فراهم شده توسط مدل ها از ساختارهاي داده اساسي مستقل مي دهد.
    - به آيتم ها مي توان توسط تعدادي سطر و ستون مراجعه كرد، و توسط الگوي شاخص مدل آيتم ها.
    - شاخص هاي مدل توسط نياز اجزاي مدل ساخته شده اند مانند ويوها و دليگيتها.
    - اگر شاخص مدل معتبر براي آيتم پدر تعيين شده باشد زمانيكه يك ايندكس از index() استفاده مي كند اين ايندكس(شاخص) اشاره دارد به يك آيتم زير آيتم پدر در مدل.شاخص يا ايندكس به دست آمده به فرزند آيتم اشاره دارد.
    - اگر يك شاخص مدل نامعتبر مشخص شده باشد براي آيتم پدر زمانيكه شاخص يا ايندكس از index() استفاده مي كند اشاره به آيتم بالايي در مدل دارد.
    - نقش متمايز بين انواع مختلف داده ها در ارتباط با يك آيتم استفاده نماييد.

    استفاده از شاخص هاي مدل


    نشان مي دهد كه چطور داده مي تواند از يك مدل بازيابي شود، با استفاده از شاخص هاي مدل ما QFileSystemModel بدون يك ويو و نمايش نام هاي فايل ها و دايركتوري ها در يك ويدجت اجرا مي كنيم. هرچند اين يك روش معمول براي استفاده از مدل نيست. عرف يا قانون استفاده كرده را توسط مدل زماني كه معاله بين شاخص هاي مدل برقرار مي شود نشان مي دهد.
    ما يك فايل سيستم طبق روش زير مي سازيم:
    QFileSystemModel *model = new QFileSystemModel;
    QModelIndex parentIndex = model->index(QDir::currentPath());
    int numRows = model->rowCount(parentIndex);

    در اين مورد ما اجرا مي كنيم تعريف QFileSystemModel، كه يك ايندكس پدر به دست مي آورد براي استفاده از پياده سازي index() فراهم شده توسط آن مدل ، و ما براي استفاده از شمارش تعداد سطرها در مدل از تابع rowCount() استفاده مي كنيم.
    براي سادگي ما علاقمند هستيم به ستون اول آيتم ها در مدل. هر سطر را به نوبه خود بررسي مي كنيم، به دست آوردن يك شاخص مدل براي آيتم اول در هر سطر ، و خواندن داده ذخيره شده براي آن آيتم در مدل.
    for (int row = 0; row < numRows; ++row) {
    QModelIndex index = model->index(row, 0, parentIndex);
    آخرین ویرایش به وسیله complexcoding : سه شنبه 01 اسفند 1391 در 06:01 صبح

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

    نقل قول: ترجمه Model/View Programming

    به دست آوردن شاخص مدل، ما شماره سط و ستون را (صفر براي اولين ستون)، و شاخص مدل مناسب براي پدر تمام آيتم ها كه ما مي خواهيم تعيين مي كنيم.متن ذخيره شده در هر آيتم بازيابي شده در تابع data() مدل استفاده مي شود. ما شاخص مدل را تعيين مي كنيم و DisplayRole ديتا را براي آيتم در قالب رشته به دست مي آورد.
    QString text = model->data(index, Qt::DisplayRole).toString();
    // Display the text in a widget.

    }

    مثال زير اصول پايه در استفاده كردن از بازيابي اطلاعات در مدل را نشان مي دهد:
    _ ابعاد مدل مي تواند پيدا كند با استفاده از rowCount() و columnCount(). اين توابع به طور كلي نياز دارند به شاخص مدل پدر مشخص شده.
    _ شاخص هاي مدل براي دسترسي به آيتم ها در مدل استفاده مي شود. سطر، ستون، و شاخص مدل پدر به آيتم پدر احتياج دارند.
    _ براي دسترسي به سطح بالاي آيتم ها در يك مدل، يك شاخص مدل تهي مشخص مانند شاخص پدر با QModelIndex().
    _ محتواي آيتم هاي داده براي سطرهاي مختلف. به دست آوردن ديتا براي يك سط خاص، هر دو مدل شاخص و نقش بيشترين تهيه كننده يك مدل هستند.

    مطالعه بيشتر

    مدل هاي جديد مي توانند توسط پياده سازي رابط استاندارد فراهم شده در QAbstractItemModel ايجاد شوند. در بخش Creating New Models، ما با ايجاد مدل آماده براي استفاده مناسب براي اجرا كردن ليست هايي از رشته ها را نشان داديم.

    كلاس هاي View


    مفاهيم
    در معماري مدل/ويو ، به دست آوردن آيتم هاي ويو داده در قالب مدل و ارائه آنها به كاربر. روشي كه داده ارائه داده است احتياج نيست شبيه به نماينده داده كه توسط مدل فراهم شده باشد.و ممكن است كاملا متفاوت با ساختار اساسي داده مورد استفاده براي ذخيره آيتم هاي ديتا باشد.

    جدايي از محتوا و عرضه به دست آمده با استفاده از رابط مدل استاندارد فراهم شده توسط QAbstractItemModel، يك رابط ويو استاندارد توسط QAbstractItemView فراهم شده، و استفاده از شاخص مدل كه آيتم هاي داده را در يك روش كلي نشان مي دهد.ويوها به طور معمول يك طرح كلي از داده هاي به دست آمده از مدل ها را مديريت مي كنند.يا استفاده از نماينده ها كه مسئوليت رسيدگي به هر دو رندر و ويرايش خصوصيات را دارند.

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

    نقل قول: ترجمه Model/View Programming

    همچنين علاوه بر ارائه اطلاعات ، ويوها رسيدگي ناوبري بين آيتم ها و برخي جنبه هاي انتخاب آيتم را نيز انجام مي دهند. اين ويوها همچنين ويژگي رابط كاربر پايه را اجرا مي كنند،از قبیل منوهاي زمینه و کشیدن و انداختن (drag and drop). يك ويو مي تواند فراهم كند ويرايش پيشفرض امكانات آيتم ها را يا ممكن است كار با دليگيت براي فراهم كردن يك ويرايشگر سفارشي.

    يك ويو مي تواند بدون يك مدل ساخته شود اما يك مدل را قبل از نمايش مفيد اطلاعات بايد فراهم كرده باشد.ويوها مسير آيتم ها را كه كاربر از طريق Selections انتخاب مي كند نگه مي دارند لذا هركدام مي توانند اين مسير را به طور جداگانه براي هر ويو ، يا مشترك بين ويوهاي چندگانه نگه داري كنند.

    برخي ويوها مانند QTableView و QTreeView ، هدرها و همچنين آيتم ها را نمايش مي دهند. همچنين توسط كلاس ويو،QHeaderView اجرا مي شوند. هدرها معمولا مدلهاي يكسان مانند ويو كه مفاهيم آنها يكسان است دسترسي دارند. آنها داده را با استفاده از تابع QAbstractItemModel::headerData() از مدل بازيابي مي كنند و معمولا هدر اطلاعات را در يك برچسب نمايش مي دهند. هدرهاي جديد را مي توان زير طبقه بندي شده از كلاس QHeaderView دانست كه بيشتر برچسب هاي تعيين شده براي ويوها را فراهم مي كند.

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

  1. معماری Model View Controller بخش دوم آماده شد همراه با مثال
    نوشته شده توسط Mahdi.Kiani در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 8
    آخرین پست: شنبه 06 اردیبهشت 1393, 13:44 عصر
  2. Model View Controller بخش اول
    نوشته شده توسط Mahdi.Kiani در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 21
    آخرین پست: یک شنبه 10 فروردین 1393, 08:48 صبح
  3. درخواست:Model-View-Controller In .net
    نوشته شده توسط manitack در بخش C#‎‎
    پاسخ: 3
    آخرین پست: جمعه 27 مهر 1386, 23:52 عصر

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

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