# Native Code > برنامه نویسی با C > بحث و گفتگوی فنی - خانواده C > سوال: Cross Plotform

## razavi_university

يك سوال در مورد Cross Plotform دارم ابزارهايي كه براي اينكار توسط جناب Nima_NF گفته شد 
 wxWidgets و Qt4 بودند. 
 مزايا و معايب و خصوصيات هر كدوم چيه ؟
براي كار با هريك به چه ابزارهايي نياز داريم؟

_مي‌بخشيد كه چند سوال پرسيدم ولي قصدم اينه كه به عنوان راهنمايي براي خودم و ساير دوستان باشد_

----------


## Nima_NF

توجه داشته باشید که این دو مورد، دو تا از پرکاربردترین ها و محبوب ترین ها هستند و در لایه زیرین خود با توجه به تنظیمات شما می توانند از سایر tooklit ها نیز استفاده کنند.
از جمله سایر تولکیت ها :   FLTK   ،Tcl/Tk  ، Gtk+

* wxWidgets* یک پروژه open source هست و به شما اجازه توسعه تجاری را نیز می دهد، هدف اصلی ارائه این تولکیت رفع نیاز شرکت ها برای نوشتن برنامه های cross-platform هست تا بتواند بدون صرف هزینه برای خرید تولکیت های تجاری نیاز های داخلی و ابزار های مورد نیاز خود را فورا نوشته و استفاده کنند، ضمن با توجه به وسعت کاربران آن برخلاف Qt اکثر کامپایلر های محبوب را پشتیبانی می کند.

برنامه هایی که توسط wxWidgets  نوشته می شوند هیچ پشتیبانی تجاری نخواهند داشت و در صورت بروز اشکال و یا پیدا کردن bug خودتان باید آن را حل کنید و یا منتظر عرضه نسخه کوچک بعدی باشید، البته این نکته فراموش نشود که شرکت های بسیاری وجود دارند که کارشان پشتیبانی و مشاوره تجاری برای wxWidgets می باشد، لذا شما  با پرداخت هزینه آن می توانید مشکلات خود را در سریع ترین زمان حل کنید.

در مورد کار با پایگاه داده از Qt ضعیف تر می باشد و بسیاری از موارد توسط third-party یا به قولی توسط سایر شرکت هایی که قابلیت هایی را برای wxWidgets ساخته اند امکانات ارائه می شود.
توسط بسیاری از کاربران آن مطرح می شود که کد های آن بی نظم تر و شلوغ تر از Qt می باشد و با بررسی هایی که خودم بر روی سورس کدهایش انجام دادم با نظر این افراد موافقم.
 اما هرگز *نباید* فراموش کرد که این تولکیت *رایگان* هست و در عوض امکاناتش و در مقایسه با سایر تولکیت های موجود بسیار قابل قبول و قابل تحسین هست.

از جمله نرم افزارها: AOL communicator
لیست نرم افزارهای توسعه یافته توسط wxWidgets

یک فلش جالب برای توضیح امکانات wxWidgets

جالب هست که بدانید در فیلم فوق، حجم کتابخانه های خودش را با Java ، Qt و +GTK مقایسه می کند.


*Qt* در چند نسخه عرضه می شود : تجاری ، آکادمیک و open source 

در نسخه کد باز و رایگان متاسفانه برنامه شما باید تحت GPL عرضه شود ، لذا کدهای برنامه شما به صورت open source باید ارائه شود و بدتر اینکه در این نسخه رایگان شما *نمی توانید* از کامپایلرهای قدرتمند مانند ++VC در ویندوز و یا سایر کامپایلرهای IDE مورد پشتیبانی استفاده کنید و فقط به صورت command line کامپایل انجام می شود.
سورس کد همه کتابخانه ها نیز در نسخه رایگان ارائه نمی شود.

اما با خرید یکی از نسخه های تجاری، این امکان وجود خواهد داشت که برنامه را به صورت تجاری به فروش برسانید، از کامپایلرهای IDE استفاده کنید و حتی قابلیت ها و امکانات طراحی واسط کاربر را به کامپایلر خود اضافه کنید تا کارها بسیار راحت و به قول دوستان visual انجام شود.  (نسخه تجاری در اندازه، قابلیت ها و با هزینه های متفاوتی عرضه می شود)
Qt Editions Comparison Chart

از طراحی خوب و بسیاری تمیزی بر خوردار است، از اکثر پایگاه داده ها و رابط های آن ها به صورت تجاری و قوی پشتیبانی می کند، حتی از MSSQL Server در نسخه ویندوز.

اگر در جایی از برنامه به bug برخورد کردید با ارائه آن فورا patch مربوطه برای رفع اشکال Qt را در اختیارتان قرار می دهند.
 در یکی از بخش هایی پشتیبانی بود که دیدم فردی bug مورد نظر را به مسئول آن گزارش کرده بود و در پاسخ آمده بود "از آنجایی که شما از نسخه رایگان استفاده می کنید نمی توانم patch را در اختیارتان قرار دهم و باید منظر ارائه نسخه xx.1 باشید"

همراه به فکر هستند تا امکانات و ابزار ویژه برای انتقال از یک نسخه Qt به نسخه بعدی را در اختیار مشتریان قرار دهند.
کومپوننت های بسیاری زیادی دارد تا کارهای GUI را آسان تر کند.

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

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

از جمله نرم افزارها: Autodesk mudbox ، Google earth ، Photoshop album


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

موفق باشید

----------


## مهدی کرامتی

کدامیک از این مجموعه ها خاصیت های نمایشی راست به چپ را بطور کامل پشتیبانی می کنند؟

----------


## Nima_NF

> کدامیک از این مجموعه ها خاصیت های نمایشی راست به چپ را بطور کامل پشتیبانی می کنند؟


همانند برنامه نویسی native در هر دو پشتیبانی می شود.

این تولکیت ها برای پیاده سازی خودشان در لایه زیرین از همان API ها و امکانات native خود سیستم عامل استفاده می کنند، بنابراین تمامی همان امکانات حتی اگر پیاده سازی نشده باشند نیز در اختیارتان هست چرا که می توانید با API های آن سیستم عامل انجام دهید.
مثلا در ویندوز  از win32 و در لینوکس از +GTK  می تواند استفاده کنید.
  در هر حال فکر می کنم Qt قابل اعتماد تر هست

Right-To-Left layout (RTL) support in wxWidgets

Bi-directional Language Support in Qt - right to left

----------


## razavi_university

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

----------


## Nima_NF

اگر برنامه شما از قابلیت های منحصر به فرد سیستم عامل استفاده نکرده باشد بله تغییرات خاصی نیاز نیست،
اما همواره ما در برنامه نویسی ها از قابلیت های مختص به نسخه جدید سیستم عامل استفاده می کنیم تا برنامه به شکل جدید خود تبدیل شود، مثل کارهایی که در Windows vista وجود دارد و در نسخه های قبلی ویندوز و یا لینوکس وجود ندارند. پس در اینگونه موارد اگر خود این تولکیت ها این امکان را پیاده سازی نکرده باشند، خودتان باید تغییرات جزئی در کدها بدهید تا برنامه برای پلتفرم بعدی نیز آماده ارائه شود.

با توجه به آشنایی با نرم افزارهای برخی از شرکت های خارجی که از این ابزار استفاده می کنند، معمولا 1 تا 3 ماه بعد از ارائه نسخه ویندوز برنامه، نسخه لینوکس و مکینتاش را عرضه می کنند.

قطعا لايسنس غیر قانونی در ایران مانند سایر موارد نمی تواند مشکل ایجاد کند، اما فکر نمی کنم چنین چیزی برای نسخه تجاری وجود داشته باشد. 
توجه داشته باشید که هدف از خرید، سورس کد کامل کتابخانه ها و پشتیبانی آن هست، چرا که هر چند روز نسخه جدیدی از آن برای رفع مشکلات عرضه می شود. در غیر این صورت نسخه open source به صورت رایگان در اختیار شماست.

----------


## Sepidar

> همانند برنامه نویسی native در هر دو پشتیبانی می شود.
> 
> این تولکیت ها برای پیاده سازی خودشان در لایه زیرین از همان API ها و امکانات native خود سیستم عامل استفاده می کنند، بنابراین تمامی همان امکانات حتی اگر پیاده سازی نشده باشند نیز در اختیارتان هست چرا که می توانید با API های آن سیستم عامل انجام دهید.


فكر مي‌كنم فقط wxWidgetsاينطور هست و QT از موتور نمايش داخلي خودش بهره مي‌برد.

----------


## Nima_NF

> فكر مي‌كنم فقط wxWidgetsاينطور هست و QT از موتور نمايش داخلي خودش بهره مي‌برد.


موتور داخلی این دو  تولکیت یعنی همان پیاده سازی توابع و امکانات از طریق توابع native هر سیستم عامل.
اصلا به خاطر همین native بودن هست که بحث قدرت این تولکیت ها مطرح هست و به دنبال آن بحث خرید لایسنس آن مطرح می شود تا سورس کد تمام کتابخانه در دسترس قرار گیرد.

حتی اگر نسخه رایگان یا همان open source این Qt را دریافت کنید می بینید که در ویندوز مستقیما از همان win32 استفاده می کند و ضمنا شما نیز بدون هیچ تغییری هر جایی که می خواهید می توانید مثلا کدهای win32 را برای نسخه ویندوز در برنامه خود استفاده کنید.


به عنوان مثال در کد زیر ،در میان برنامه با استفاده از Q_WS_WIN می توانیم از API ها ویندوز استفاده می کنیم  که در اینجا ما از Rectangle یکی از توابع GDI استفاده کردیم و برای سازگاری با کلاس های Qt هم از متد های تخصیص و آزاد کردن حافظه خود Qt استفاده می کنیم:

#ifdef  *Q_WS_WIN       //for windows*
    HDC hdc = painter.paintEngine()->getDC();

    *Rectangle*(hdc, 40, 40, 100, 100);   // win32 API / GDI

    painter.paintEngine()->releaseDC();
#endif

به همین ترتیب در X11 و Mac

----------


## Inprise

منظورش اين بود كه QT از كنترلها و ويجت‌هاي استاندارد ويندوز استفاده نميكنه و از موتور رندر خودش استفاده ميكنه كه درست هست . wxWidgets اينطور نيستش و از كنترلهاي استاندارد ويندوز استفاده ميكنه . مكانيزم مديريت رخداد QT هم مستقيما بر اساس پياده سازي ويندوز نيست .

----------


## Nima_NF

تشکر ،الآن متوجه شدم منظورشان چه بود.
بله برای Qt کاملا همین طور است چون تمامی widget ها دارای قابلیت های جدید هستند، لذا دوباره تعریف شده اند.(در هر صورت منظور من هم لایه زیرین بود که این طراحی ها هم جزئی از آن هست چرا که رابط کاربری بخشی از کار این تولکیت هاست)

نکته ای که اینجا وجود دارد این هست که در wxWidgets آن دسته از کنترل هایی که در ویندوز وجود دارند به همان شکل از كنترلهاي استاندارد استفاده می کنند، اما سایر widget های جدید که در ویندوز و یا سایر سیستم عامل ها به صورت استاندارد وجود ندارند (انواع پیشرفته تر کنترل ها یا به قولی انواع Extended ) همانند کنترل های Qt پیاده سازی شده اند و حتی به خاطر جدید بودن، event آن ها نیز تعریف شده است و برخلاف Qt با قبلی ها ترکیب نشده اند و در کنار کنترل های استاندارد با نامی دیگر وجود دارند.

ضمنا جناب razavi_university این مورد را هم به تفاوت این دو تولکیت اضافه کنید که در Qt تعداد widget های سفارشی یا همان کنترل های جدید، بیشتر از wxWidgets می باشد و باعث می شود به سادگی بتوانید از انواع پیشرفته ماندد Tool Box بدون نیاز به طراحی استفاده کنید و حتی آن ها را نیز سفارشی کنید.

.

----------


## amytis

*با سلام
امیدوارم که همیشه شاد و سلامت باشید


در این مقاله به بحث پیرامون C++‎/Qt خواهیم پرداخت و همزمان با مفاهیم اولیه Qt آشنا خواهیم شد. همچنین با IDE قدرتمند Eclipse و پیکربندی آن جهت استفاده در کد نویسی C++‎/Qt, C/C++‎, Perl, Python/Jython, Ruby و هر زبان برنامه نویسی دیگری آشنا خواهیم شد.
در پایان نحوه نصب و پیکربندی Qt به همراه کامپایلر مورد نظر آن یعنی GCC Compiler را جهت کار با Eclipse مورد بررسی قرار می دهیم.
به دلیل تسلط نگارنده بر Mac OS X و Windows تمامی مقاله پیرامون Leopard و XP Professioanl x86 می باشد و نصب نرم افزارهای مورد نظر در لینوکس و سایر سیستم های عامل موردنظر را به خوانندگان گرامی واگذار می نماییم.
همچنین فرض بر این است که خوانندگان گرامی دارای مهارت لازم در کار با C و یا C++‎ می باشند.

در نگارش این مقاله قریب ۸۰ مرجع بکار گرفته شده است.
این مقاله در ۸۵ صفحه نگارش یافته است.

زبان مقاله کاملا فارسی می باشد.


**Download Link: C++‎/Qt over Eclipse - Part I (Introduction & C/C++‎, Java, Perl, Python/Jython, Ruby, etc. in one IDE).* x
 *

دریافت مقاله های قبلی:
**http://www.babaei.net/?req=articles
* *

نکته: جهت دریافت مقاله نیاز به ورود ایمیل و ثبت آن می باشد. پس از انجام این عمل یک لینک دانلود مستقیم اما اختصاصی برای آدرس ایمیل شما ایجاد و سپس ارسال می شود. در ایمیل ارسالی اطلاعات مربوط به مقاله از قبیل حجم٬ پسورد و ... به همراه لینک دریافت در انتهای نامه موجود می باشد. حداکثر اعتبار این لینک ۷۲ ساعت می باشد.*

----------


## kiuhnmgtrdcv

بنظر من   QT/Eclipse  مثل win32 ویژوال سی پلاس مایکروسافت  میمونه با این تفاوت که میشه کدهای native برای هر سیستم عاملی بنویسیم  
ولی در هر حال برای برنامه نویسی native برای ویندوز باید با API ویندوز اشنایی داشته باشیم چون توی QT از همین توابع استفاده میکنند و برای لینوکس از GDK+ و ..

----------

