SpareNet Servers Advertising & Link Exchange

اطلاعیه

بستن
هیچ اطلاعیه ای هنوز ایجاد نشده است .

آموزش قدم به قدم Qt

بستن
X
 
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
نوشته‌های جدید

  • آموزش قدم به قدم Qt

    [align=center]آموزش قدم به قدم Qt [/align][align=center]به نام خدا[/align][align=center]در ابتدا سعی میکنیم تا یک تعریف کلی ارائه کرده و در ادامه بحث به تشریح جزء به جزء آن بپردازیم. کیوت یک چارچوب یا فریم ورک متن باز جهت توسعه نرم افزارهای کاربردی می باشد که غالبا در جهت طراحی و توسعه واسط های کاربری مورد استفاده قرار می گیرد. در واقع کیوت یک زبان برنامه نویسی نیست، مانند دات نت مایکروسافت یک فریم ورک یا چارچوب است که توانایی کار با زبان های مختلف برنامه نویسی را البته بصورت متفاوت تر خواهد داشت.[/align][align=center]همچنین این فریم ورک علاوه بر واسط گرافیکی، امکان توسعه برنامه های مبتنی بر خط فرمان را نیز پس از ویرایش چهارم خود فراهم کرده است. کیوت بصورت پیشفرض شامل مجموعه ای از کتابخانه ها و سرآیندهای نوشته شده به زبان سی پلاس پلاس میباشد که در جهت توسعه ساده تر نرم افزارهای کاربردی در دسترس برنامه نویسان قرار گرفته است. همچنین دارای کلاس های متعددی در جهت کار با واسط گرافیک کاربری دو بعدی و سه بعدی، چندرسانه ای، شبکه، پایگاه داده ها، انتقال داده، ویرایش و نمایش محتوای وب و... می باشد که برنامه نویسی به زبان سی پلاس پلاس را تاحد فوق العاده ای سهولت و بهبود می بخشد. بنابراین برنامه نویسان سی پلاس پلاس در آن احساس غریبی نخواهند کرد! البته باید اشاره داشت که این چارچوب با زبان های برنامه نویسی مختلفی سازگار است اما بصورت پیش فرض بر روس سی پلاس پلاس استوار شده است.[/align][align=center] [/align][align=center]

    [/align][align=center] [/align][align=center]لازم به ذکر است که نرم‌افزارهای نوشته شده با ابزار کیوت قادرند تا با استفاده از یک کامپایلر زبان سی‌ پلاس پلاس بر روی طیف وسیعی از سیستم‌عامل‌ ها از جمله گنو لینوکس، ویندوز، مک‌اواس، اسمارت فون ها و... اجرا شوند، در واقع کیوت توانایی اجرا بر روی محیط های عملیاتی مختلف را خواهد داشت، بدین ترتیب حمل نرم‌افزار نوشته شده بدون تغییر در متن کد نوشته شده امکان پذیر است.

    کیوت یک فریم ورک است، بنابراین قبل از هرچیزی باید به تعریف این واژه بپردازیم. در یک تعریف عامیانه فریم ورک به معنای یک کتابخانه و یکسری فایل های سرآیند است، اما در واقع فریم ورک چیزی بیش از اینهاست، برای مثال شرکت های طراحی هواپیماهای مسافربری را در نظر بگیرید، آیا این شرکت ها هر بار که تصمیم بر طراحی یک محصول جدید را دارند، فرآیند تولید را از ابتدا دنبال می کنند؟ قطعا اینطور نیست زیرا آنها کاری هایی که قبلا انجام شده است را دوباره انجام نمی دهند، به مثال معروف چرخ اشاره می کنیم، آیا وقتی چرخ از قبل طراحی شده لزومی به طراحی مجدد آن است؟ طراحی مجدد زمانی معقول به نظر می رسید که قصد داشته باشیم چرخی جدید "با قابلیت های بهتر" طراحی کنیم! این مفهوم در زبان های برنامه نویسی در قالب واژه فریم ورک مطرح می گردد. بنابراین برنامه نویس در قالب چارچوبی که شرکت مورد نظر طراحی کرده برنامه نویسی می کند.[/align][align=center] [/align][align=center][/align][align=center]
    برنامه نویس برای استفاده یا عدم استفاده از فریم ورک مختار می باشد. در واقع اوست که تشخیص می دهد که این نیاز وجود دارد یا خیر، استفاده از فریم ورک دلیلی بر عدم آگاهی یا ضعف برنامه نویس نیست، همینطور عدم استفاده از آن هم دلیلی بر آگاهی مطلق وی نیست. با استفاده از یک فریم ورک میتوان از امکانات تعریف شده در آن در جهت توسعه سریع تر و استاندارد نرم افزار استفاده نمود، زیرا خیلی از امکانات را بصورت آماده در اختیار شما قرار میدهد و نیازی به طراحی مجدد آنها نخواهید داشت. چارچوب کیوت توسط شرکت نوکیا توسعه داده می شود.

    در ادامه مباحث مقدماتی در باب کیوت در این پست با محیط های کاری کیوت آشنا می شویم. در ادامه مطلب می توانید پیش نمایشی از این محیط ها را مشاهده نمایید.
    [/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center][/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center] [/align][align=center][/align][align=center]در ادامه مباحث بررسی چارچوب Qt لازم است تا به مجوزهای انتشار آن هم اشاره کنیم. البته قبل از آن بهتر است تا هرچند اجمالی مروری بر مجوزهای معمول و بین المللی انتشار نرم افزار داشته باشیم. بصورت کلی چهار نوع مجوز برای انتشار نرم افزار وجود دارد:

    الف. تجاری: نرم افزارهایی که تحت این مجوز انتشار داده می شوند دارای مبلغ بخصوصی هستند. در واقع شرکت توسعه دهنده یک نرم افزار خاص پس از طی فرآیندهایی که در نهایت منجر به تولید نهایی نرم افزار خواهد شد، جهت عرضه محصول مبلغی را برای آن در نظر می گیرد. برای مثال نرم افزارهای Maya ، مجموعه Adobe Master Collection شامل فتوشاپ، فلش و دیگر زیر مجموعه هایش، سیستم عامل ویندوز و... را برای استفاده باید خریداری نمود.


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

    ج. رایگان: اینگونه نرم افزارها رایگان بوده و استفاده از آنها آزاد می باشد.


    د. متن باز: اینگونه از نرم افزارها نیز رایگان می باشند. اما فرق این مورد با نرم افزارهای رایگان این است که شما در نرم افزارهای متن باز حق اعمال تغییرات و انتشار مجدد با ذکر نام طراح را خواهید داشت، در صورتیکه چنین حقی در مجوزهای دیگر برای شما وجود ندارد. البته خود نرم افزارهای متن باز نیز دارای مجوزهای دیگری می باشند که مفاد مختلفی را در بر می گیرند که شرح آن از حوصله این بحث خارج است. لازم به ذکر است که کیوت شامل مجوزهای "تجاری" و "متن باز" می باشد.
    *سایت نوکیا اطلاعاتی را در زمینه Qt Licensing در . منتشر کرده است.
    یکی از ویژگی های فوق العاده Qt طراحی و توسعه نرم افزارها با واسط گرافیکی قدرتمند می باشد. در واقع کیوت به چارچوبی قدرتمند در جهت طراحی و توسعه واسط های گرافیکی پیشرفته تحت سیستم عامل و موبایل شناخته می شود. کیوت شامل کتابخانه های متعددی در جهت بهره گیری از گرافیک دو بعدی و سه بعدی می باشد. همین موارد باعث می شوند تا واسط گرافیک کاربری نرم افزارهایی که توسط این فریم ورک طراحی می شوند، بسیار زیبا و منعطف باشند. لازم به ذکر است که علاوه بر این کتابخانه ها و امکانات دیگر، کیوت از زبان QML که از جاوا اسکریپت نشات گرفته استفاده می کند، که به نوعی یک زبان ساده و منعطف در جهت طراحی واسط گرافیک کاربری به حساب می آید.[/align][align=center][/align][align=center] [/align][align=center]توجه: در "ادامه مطلب" میتوانید لیستی از کتابخانه های Qt را مشاهده نمایید.[/align][align=center] [/align][align=center]QtSql[/align][align=center]Classes for database integration using SQL[/align][align=center]QtSvg[/align][align=center]Classes for displaying the contents of SVG files[/align][align=center]QtWebKit[/align][align=center]Classes for displaying and editing Web content[/align][align=center]QtXml[/align][align=center]Classes for handling XML[/align][align=center] [/align][align=center] [/align][align=center]QtCore[/align][align=center]Core non-graphical classes used by other module[/align][align=center]QtGui[/align][align=center]Graphical user interface (GUI) components[/align][align=center]QtMultimedia[/align][align=center]Classes for low-level multimedia functionality[/align][align=center]QtNetwork[/align][align=center]Classes for network programming[/align][align=center]QtOpenGL[/align][align=center]OpenGL support classes[/align][align=center] [/align][align=center] [/align][align=center]QtScript[/align][align=center]Classes for evaluating Qt Scripts[/align][align=center]QtTest[/align][align=center]Tool classes for unit testingModules for Windows developers[/align][align=center]QAxContainer[/align][align=center]Extension for accessing ActiveX controls[/align][align=center]QAxServer[/align][align=center]Extension for writing ActiveX serversModules for Unix developers[/align][align=center]QtDBus[/align][align=center]Classes for Inter-Process Communication using the D-Bus[/align][align=center] [/align][align=center]QtDeclarative[/align][align=center]An engine for declaratively building fluid user interfaces.[/align][align=center]Phonon[/align][align=center]Multimedia framework classes[/align][align=center]QtDesigner[/align][align=center]Classes for extending Qt Designer[/align][align=center]QtUiTools[/align][align=center]Classes for handlingQt Designerforms in applications[/align][align=center]QtHelp[/align][align=center]Classes for online help
    یکی از ویژگی های فوق العاده کیوت چند سکویی بودن آن است (واژه های متشابه: مالتی پلتفرم - Multi Platform - چند پلتفرمی - چند بستری - Cross Platform - مستقل از سکو). کیوت وابسته به پلتفرم های سخت افزاری و نرم افزاری خاص نیست، این بدین معناست که برنامه نوشته شده در آن بر روی انواع مختلفی از سخت افزارها، کنسول ها و سیستم عامل ها قابل اجراست. از جمله این محیط های اجرایی می توان به خانواده ویندوز، مک او اس، لینوکس، مدل های خاصی از یونیکس، ویندوز موبایل، سیمبین، اسمارت فون ها و در جدیدترین پروژه (که قرار است انجام شود) به سیستم عامل اندروید اشاره نمود.
    چند پلتفرمی - Cross Platform - چیست؟
    فرض کنید شما برنامه ای را توسط Qt
    نوشته اید. پس از تولید نهایی شما می توانید این برنامه را بر روی سیستم عامل های مختلفی مثل ویندوز، لینوکس و... به راحتی اجرا نمایید. کاری که جاوا توسط ماشین مجازی انجام می دهد، در واقع یکی از نقاط تمایز فریم ورک مایکروسافت یعنی
    .Net
    با این چارچوب ها نیز همین امر می باشد. در واقع مایکروسافت در استفاده از نوع محیط عملیاتی نوعی انحصار بوجود آورده است. البته در اینجا از پروژه
    Mono
    مایکروسافت فاکتور گرفته ایم. این پروژه در صدد است تا فریم ورک
    .Net
    را برای سایر سیستم عامل ها پیاده سازی کند که البته طبق شنیده ها فعلا چشم انداز روشنی از آینده آن قابل تصور نیست.


    انقیاد (Binding) یکی از تعاریف مربوط به پیاده سازی زبان های برنامه نویسی است. در درس "طراحی و پیاده سازی زبان های برنامه سازی" می خوانیم که: هنگام پیاده سازی و یا اجرای یک برنامه، عنصری از این برنامه میتواند صفتی از مجموعه صفات ممکن را به خود بگیرد. به این عمل انقیاد (Binding) و به زمان انجام این عمل، زمان انقیاد (Binding Time) گفته میشود. اما در یک تعریف ساده زمان انقیاد به معنای نسبت دادن یک قید به چیزی است! مثلا وقتی لیوان را در نظر بگیرید، تا زمانیکه چیزی درونش نیست یک لیوان ساده و خالی است اما زمانیکه فرضا مقداری آب داخلش بریزیم یک قید به آن نسبت داده ایم و از این پس آن را یک لیوان آب می نامیم. پس تا اینجا این سوال را پاسخ دادیم که انقیاد چیست؟
    انواع زمان های انقیاد
    الف. انقیاد زمان اجرا (Runtime Binding)
    ب. انقیاد زمان ترجمه یا کامپایل (Compile Time)
    ج. انقیاد زمان پیاده سازی (Implementation Time)
    د. انقیاد زمان تعریف زبان (Definition Time)
    کیوت یک فریم ورک یا چارچوب است و یک زبان نیست، همانطور که قبلا اشاره شد این فریم ورک یا چارچوب قابلیت کار با انواع زبان های مختلف را دارد. از آنجاییکه زمان های انقیاد مربوط به زبان برنامه نویسی می باشد، بنابراین این زمان ها در زبان های مختلفی که این چارچوب پشتیبانی میکند متفاوت خواهد بود. در اینجا ما اساس کار خود را طبق زبان برنامه نویسی سی پلاس پلاس در نظر می گیریم. با توجه به این توضیحات در شکل زیر می توانید اطلاعات مربوط به زمان های انقیاد چهارگانه را مشاهده نمایید:
    در این بخش که نام آن مدیریت حافظه در Qt میباشد علاقه مندم تا به سه شیوه مدیریتی حافظه اشاره ای داشته باشم. مدیریت حافظه اصلی یکی از مهمترین مباحث مطرح در طراحی زبان هاست، با اینکه حجم حافظه های اصلی خصوصا در عصر حاضر روز به روز فزونی می یابد و شاید مانند قدیم به مشکلات کمبود یا اشغال حافظه بر نخوریم اما این دلیلی برای عدم رعایت تکنیک های مدیریت حافظه نیست. این حرف مثل این می ماند که بگوییم چون حافظه های جانبی ما حجم بسیار بالایی دارند پس استفاده از تکنیک های کاهش افزونگی اطلاعات سیستم های پایگاهی حداقل از نظر ذخیره سازی بر روی حافظه های جانبی بی مورد است! که این درست نیست. با این پیش زمینه به تشریح اولین روش می پردازیم:
    الف. ایجاد ساختار درختی
    در صورتیکه در کیوت کلاس والد را از نوع QObject در نظر بگیریم، تمامی فرزندان نیز از نود اول درخت که با اصطلاح به آن والد می گویند ارث بری می کنند، مزیت این روش این است که در هر زمان تنها با حذف والد میتوان کلیه حافظه های اختصاص یافته را بازیابی نمود، چرا که با حذف والد اصلی کلیه فرزندان نیز از بین خواهند رفت. این درخت از نوع Heap می باشد که البته از مشکلات حافظه Heap می توان به تکه تکه شدن حافظه به دلیل حذف و درج های مکرر اشاره داشت که خود بحث جدایی را می طلبد. شکل زیر را مشاهده نمایید.
    در بخش دوم بخش مدیریت حافظه در فریم ورک Qt به یک موضوع کلی اشاره می کنیم. (ب. اشتراک در حافظه) هنگامیه اقدام به تعریف یک متغیر می کنیم، یک بلوک از خانه های حافظه به آن اختصاص می یابد. نکته ای که وجود دارد این است اگر متغیری دیگر با نام دیگر ولی مقدار یکسان را تعریف نماییم یک اشاره گر به مرجع اصلی فرستاده می شود و بلوک دیگری از حافظه هدر نمی رود. بصورت معمول باید باید یک کپی از آن در حافظه قرار گیرد که همانطور که می دانیم این کار علاوه بر اتلاف بی رویه حافظه، افزونگی موقتی را بر روی حافظه اصلی بوجود می آورد که در اینجا این عمل به خوبی مدیریت می شود. نکته دیگر هم این است که وقتی مقدار آن متغیر دوم تغییر می کند، بصورت خودکار مکان ذخیره سازی متغیر دوم از مرجع برداشته و به بلوک دیگری از حافظه منتقل می گردد، زیرا دیگر مقدار یکسانی ندارند. این مفهوم را می توانید بخوبی در شکلی که به همین منظور طراحی شده و در زیر این مطلب درج شده است، مشاهده نمایید.
    چارچوب Qt هم مانند جاوا و مجموعه ویژوال استودیو از واحدی با نام Garbage Collector به معنای پاک کننده زباله یا به اصطلاح "زباله روب" استفاده می کند. این واحد نقش مهمی را در مدیریت خودکار حافظه ایفا می کند.

    Garbage Collector چیست؟ [/align][align=center]کار اصلی این واحد اطمینان از این مورد است که بلوکی بی مورد در حافظه اصلی اشغال نشده باشد و در صورت وجود آن شی اضافه را حذف خواهد کرد. در واقع این واحد در بازه های زمانی خاصی حافظه را مورد بررسی قرار داده و آن را از وجود حافظه های هرز پاکسازی می نماید. مکانیسم آن هم استفاده از "شمارنده مرجع*" است. در واقع وقتی یک خانه حافظه مورد استفاده قرار می گیرد، فیلد شمارنده ای تشکیل شده و یک واحد به آن اضافه می شود، حال فرض کنیم در جایی دیگر باز از این خانه استفاده شد، بنابراین اشاره گری دیگر به ان داریم، پس شمارنده ما یک واحد دیگر افزایش می یابد، به همین ترتیب تا شماره های بیشتر... همچنین با برداشته شدن هر اشاره گر از خانه مذکور یک عدد از آن کاسته می شود، بنابراین وقتی همه اشاره گرها از آن برداشته شوند، شمارنده صفر شده و آن خانه حافظه به همراه فیلد شمارنده بصورت خودکار از بین خواهد رفت. فعلا دانستن همین تعریف برای این بخش کافی است. همچنین شکل زیر می تواند گویای عملکرد این واحد باشد:[/align][align=center]
    در ابتدا به سه روش نامگذاری متغیرها در زبان های برنامه نویسی اشاره می کنیم. رعایت این اصول در بهتر شدن هرچه بیشتر خوانایی برنامه به ما کمک شایان توجهی خواهد کرد. از جمله این روش ها میتوان به کوهان شتری، پاسکال و مجارستانی اشاره کرد. این نکات به این جهت در این بحث اضافه می شوند که اولا دقت خود را در بکارگیری واژه های صحیح بالاتر ببریم و دوما به یاد داشته باشیم که "ما برنامه را برای خودمان نمی نویسیم، برای دیگران می نویسیم" ( نقل به مضمون از کتاب Beautiful Code).


    نحو یا Syntax در کیوت
    کیوت حساس به حروف بزرگ و کوچک می باشد. لازم به ذکر است که اکثر قاعده های کیوت همان قواعد زبان سی پلاس پلاس است. مانند کلمات کلیدی، ساختارهای شرطی، عملگرهای محاسباتی، منطقی، جبری، انواع داده ای، درج توضیحات، کاراکترهای Light Space و... ، همچنین در نامگذاری کلاس ها، توابع، متدها و... قواعد نامگذاری ویژه ای در جهت بهبود قابلیت خوانایی در نظر گرفته می شود. تصویر زیر کاملا در این زمینه گویاست:[/align][align=center]
    تا اینجا در یازده جلسه به بررسی محتوایی فریم ورک Qt پرداختیم، حال اگر علاقه مند به نصب و یادگیری آن هستید این دو پست آخر را هم دنبال کنید. در صورتیکه تمایل به نصب ابزارهای کیوت می توانید از طریقQt-project.org.اقدام نمایید.

    در این صفحه با چندین بخش با نام های Qt SDK، Qt libraries، Qt Creator، Visual Studio Add-in مواجه خواهید شد که شامل یکسری لینک های دانلود و صفحات جانبی مفید هستند که شما بر حسب هدف و پلتفرم مورد نظر تصمیم می گیرید که چه چیزی را انتخاب کنید. فرآیند نصب کیوت (Qt-SDK-OpenSource) به ساده ترین شکل ممکن انجام شده و پس از پایان پروسه ذکر شده می توانید آیکون مربوط به Qt Creator را بر روی Desktop خودتان مشاهده نمایید. پس از اجرا اولین صفحه ای را که مشاهده میکنید بصورت زیر است :
    لطفا تصاویر بخش های پرکاربرد کیوت را در ادامه مطلب مشاهده نمایید...






    به بخش پایانی مجموعه مباحث چارچوب کیوت رسیدیدم! به همین سرعت!... ولی این پایان فقط برای این برهه از زمان و مقوله مقدمات آن بود! فکر می کنم با این توضیحات یک شناخت کلی و در برخی از نقاط جزئی از چارچوب کیوت به دست مخاطب عزیز آمده باشد. در تصویر زیر می توانید چندین نرم افزار معروف که توسط کیوت توسعه داده شده اند را مشاهده نمایید. به امید اینکه مجموعه این مباحث و تصاویری که صرفا برای درک بهتر مفاهیم کیوت برای مخاطبان عزیز (دانشگاه و بلاگ) طراحی شده بود مورد رضایت شما واقع شده باشد.
    [align=CENTER][/align][align=center]
    همچنین با دنبال کردن مطلب در "ادامه مطلب" می توانید لیستی از شرکت هایی که از کیوت استفاده می کنند و همچنین پروژه های محبوب مرتبط با آن را مشاهده نمایید.[/align][align=center] [/align][align=center]Autodesk[/align][align=center]Google[/align][align=center]Adobe[/align][align=center]the European Space Agency[/align][align=center]Siemens[/align][align=center]Volvo[/align][align=center]Walt Disney[/align][align=center]Skype[/align][align=center]Samsung[/align][align=center]Philips[/align][align=center]Panasonic[/align][align=center]Sun[/align][align=center] [/align][align=center]>> Popular Project - Qt[/align][align=center] [/align][align=center]AutoCAD[/align][align=center]Google Earth[/align][align=center]Google Chrome[/align][align=center]Linux GUI[/align][align=center]FireFox[/align][align=center]Opera[/align][align=center]Skype[/align][align=center]VLC media player[/align][align=center]Adobe Photoshop[/align][align=center]Adobe Acrobat[/align][align=center]Adobe Album[/align][align=center]VirtualBox[/align][align=center]Matlab[/align][align=center]در صورتیکه علاقه مند به پیگیری و آموزش این فریم ورک باشید می توانید از لینک های زیر که از شاخص ترین منابع انگلیسی و فارسی در جهت فراگیری کیوت می باشند، بهره ببرید. ضمن اینکه از طریق پست قبل می توانید نسبت به دانلود و نصب کیوت اقدامات لازم را به عمل آورید. [/align][align=center]C++‎ GUI Programming with Qt4 | Pages: 556 | 51,833 KB[/align][align=center][/align][align=center] [/align][align=center]The Art of Building Qt Applications | Pages: 442 | 6,528 KB[/align][align=center][/align][align=center] [/align][align=center][font]مقدمه ای بر توسعه برنامه های چند سکویی بوسیله چارچوب کیوت
    مهرداد مومنی | 67 صفحه | 934 کیلوبایت[/font][/align][align=center][/align][align=center] [/align]
    [align=center][/align]
    [align=center][/align]

  • #2
    RE: آموزش قدم به قدم Qt

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

    نظر


    • #3
      RE: آموزش قدم به قدم Qt

      تو این سایت آموزش qt بصورت ویدیویی از صفر هستش:

      یه سر بزن اینجا::

      http://qtips.ir

      نظر


      • #4
        RE: آموزش قدم به قدم Qt

        http://barnamenevis.org/showthread.php?436304-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-C-%E2%80%8E%E2%80%8E-Qt-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85
        [align=center][/align]
        [align=center][/align]

        نظر

        صبر کنید ..
        X