من مقاله ای که در زیر می آید را حدودا دو سال پیش نوشتم زمانی که شناختم از کیوت بسیار کمتر از حالا بود و از دو سال پیش تا به حال اتفاقات زیادی برای Qt اتفاق افتاده ، تا جایی که ممکن بود این مقاله را بروز کردم ؛ اما قطعا ممکنه همچنان دچار نواقص زیادی باشه(مشکلاتی همچون فنی ، نگارشی و...) ، در صورت مواجه شدن با اشتباهات تعجب نکنید ، لطفا به من گزارش کنید..
(در زمان ویرایش آخر این مقاله نسخه ی Qt 5.2.0 منتشر شده است)
آشنایی با چارچوب کاری Qt
چکیده :
هدف از تالیف این مقاله ، آشنایی بیشتر خواننده با چارچوب کاری Qt می باشد و سعی شده تا ضمن معرفی کامل این چارچوب کاری ، با سایر چارچوب های کاری مشابه هم مورد مقایسه قرار داده شود تا مزایا و معایب این چارچوب کاری برای خواننده بیشتر مشخص شود.
کلمات کلیدی :; Nokia; Trolltech Qt ; MFC ; Framwork;Digia
مقدمه :
در سال 2001 مایکروسافت[1] چارچوب کاری[2] جدید را به نام دات نت[3] به توسعه دهندگان[4] معرفی کرد در این سال هایی که از قدمت این چارچوب کاری می گذرد به خاطر نقاط قوت این چارچوب کاری ، بزرگترین نقطه ضعف دات نت از چشمان توسعه دهندگان مخفی و هموراه در بین برنامه نویسان محبوب ماند.
اما در این سال های اخیر که پلتفرم[5] های متنوع تری راهی بازار می شود و این پلتفرم ها با سرعت بیشتر عرضه می شوند بزرگترین ضعف دات نت یعنی عدم پشتیبانی کامل از چند سکویی[6] بیش از پیش به چشم می آید ، این در حالی است که یکی از مهم ترین اهداف مایکروسافت در عرضه دات نت پشتیبانی از چند سکویی بود تا بتواند با جاوا مقابله کند اما در این کاراصلا موفق نبود.
در سال 1991 هاروارد نورد[7] و آیریک چامبه انگ[8] کار بر روی پلتفرم چند سکویی را آغاز کردند که Qt[9] نام گرفت ،این در حالی است که از همان ابتدا هدف این دو، ساخت پلتفرمی بود که به طور کامل از چند سکویی پشتیبانی کند و به علت این که این نیاز در سال های اخیر بیش از پیش به چشم می آید باعث شد ، Qt مورد توجه بسیاری از توسعه دهندگان قرار بگیرد و همین امر موجب شد تا شرکت نوکیا[10] در سال 2008 شرکت ترول تِک[11] را خریداری کند و باعث شود Qt بیش از پیش شکوفا شود اما در سال 2011-2012 شرکت فنلاندی Digia مجوز تجاری Qt را به طور کامل از نوکیا خریداری نمود و از آن سال تا به حال که این مقاله در حال ویرایش است ، توسعه Qt به عهده ی Digia می باشد.
Qt چیست؟
Qt یک چارچوب کاری برنامه نویسی است که به برنامه نویسان این امکان را می دهد تا به راحتی برنامه خود را توسعه دهند.
این چارچوب کاری از مجموعه ای از کتابخانه ها و سرآیند های نوشته شده به زبان C++ تشکیل شده است.
در Qt تقریبا برای تمام زمینه ها کلاس هایی در نظر گرفته شده است تا برنامه نویس با سرعت و سهولت بیشتر بتواند برنامه مد نظرش را توسعه دهد ، از جمله این کلاس ها می توان به کلاس ها کار با واسط گرافیکی ، چند رسانه ای ، ابزار های پایگاه داده ، شبکه،چند نخی و... نام برد.
نکته ای که Qt را از سایر چارچوب های کاری برنامه نویسی جدا می کند این است که تمامی این کلاس ها و کتابخانه ها به صورت کاملا چند سکویی نوشته شده اند تا برنامه های نوشته شده در این چارچوب کاری بتواند در اکثر پلتفرم ها قابل اجرا باشد.
به همین دلیل اجرای برنامه نوشته شده در سایر پلتفرم ها با کمترین تغییر ممکن در منبع کد[12] امکان پذیر است.
در Qt می توان با استفاده از زبان های برنامه نویسی متعددی کد نوشت که می توان از C++ ، جاوا[13]، پایتون[14] و... نام برد.
Qt در پلتفرم های زیادی قابل اجرا است که می توان از Windows، Mac OS ، Linux و سیستم عامل های جاسازی شده[15] نام برد. (به گفته ی Digia در زمان ویرایش این مقاله Qt از 14 پلتفرم مختلف پشتیبانی می کند)
انواع عرضه شده:
تاکنون نسخه های متفاوتی از Qt برای پلتفرم متفاوت عرضه شده که می توان به گزینه های زیر نام برد:
- Qt/X11 برای خانواده های Linux و Unix
- Qt/Mac برای خانوداده های Macintosh
- Qt/Windows برای خانواده های Windows
- Qt/Jambi برای جاوا
(در زمان ویرایش این مقاله ، پشتیبانی از توسعه برنامه برای سکو های Android و ios هم به Qt اضافه شده)
انواع مجوز های Qt:
Qt در دو نسخه منبع باز[16] و تجاری عرضه می شود ، نسخه تجاری (آزاد) برای هر نوع توسعه نرم افزار است در حالی که نسخه منبع باز برای توسعه نرم افزار در قالب GPL و QPL است.
البته بعد از خریداری مجوز انتشار Qt توسط شرکت نوکیا از نسخه 4.5 به بعد امکان توسعه در قالب LGPL هم فراهم شده.
قرداد نام گذاری در Qt:
کلاس ها و کتابخانه ها در Qt با Q شروع می شوند به طور مثال QPushbutton کلاس دکمه است و تقریبا اکثر نرم افزار هایی که با Qt توسعه داده می شوند از همین قانون نام گذاری برای نام گذاری نرم افزارشان استفاده می کنند مانند QDevelop.
مشابه این قانون نام گذاری برای نرم افزار های نوشته شده ی تحت میز کار KDE هم وجود دارد.
محیط های توسعه[17] Qt:
تا به حال IDE های مختلفی برای کار با این چارچوب کاری تهیه شده ، که به دلیل منبع باز بودن این چارچوب کاری بیشتر این IDE ها توسط علاقه مندان به این چارچوب کاری تهیه شده است.
مهم ترین IDE، Qt توسط شرکت نوکیا ارائه شده که Qt Creator نام گذاری شده است.
اما کد نویسی با Qt در محیط های دیگری هم قابل انجام است که می توان به IDE های زیر اشاره کرد:
- Qdevelop
- Eclipse در این IDE که یکی از معروفترین IDE ها هم هست می توان با استفاده از افزایه[18] از Qt استفاده کرد.
- Edyuk
- Visual Studio در این IDE می توان با استفاده از درافزا[19] از Qt استفاده کرد.
کامپایلر ها:
Qt محدوده وسیعی از کامپایلر ها را پشتیبانی می کند که می توان از کامپایلر های زیر نام برد:
نرم افزار هایی که با Qt توسعه داده شده:
تاکنون نرم افزار های بسیار زیادی با استفاده از Qt توسعه داده شده است که مهم ترین آن ها عبارت اند از:
- Autodesk Maya
- Google Earth
- Skype
- VLC media player
- Ubuntu Touch
- Cisco Packet Tracer
- Autodesk MotionBuilder
- Adobe Photoshop Album
- Mathematica
- و خانواده ی KDE
مقایسه با سایر چارچوب های کاری:
بدون شک یک از اهداف هر مقاله ارتباط موضوع مقاله با سایر موضوعات مشابه است به همین دلیل در این مقاله می خواهیم Qt را با سایر چار چوب های کاری ارائه شده مقایسه کنیم.
اما باید توجه داشته باشیم که مقایساتی که انجام می دهیم ، مقایسه هایی درست و منطقی باشد .
ما نمی توانیم Qt را با یک زبان برنامه نویسی مقایسه کنیم زیرا Qt یک چارچوب کاری بر روی زبان های برنامه نویسی است و این مقایسه ها کاملا اشتباه است اما گه گاه شاهد این مقایسات اشتباه در دنیای مجازی هستیم.
در ضمن مقایسه Qt با چارچوب های کاری مانند دات نت و جاوا مقایسه ای منطقی نیست زیرا دات نت و جاوا کد های مدیریت شده[22] تولید می کنند ولی Qt ، کد های محلی سیستم عامل[23] ، همین امر موجب این می شود که هر یک برتری های مطلقی نسبت به هم داشته باشند و نه برتری های نسبی به همین دلیل نمی توانیم بگوییم که کدام نسبت به دیگری ارجعیت دارد زیرا هر کدام برای هدف خاص خود ساخته شدند.
چنین مقایسه ای مانند مقایسه یک کامیون با یک ماشین سواری است ، که اصلا مقایسه منطقی نیست.
اما ما در این بخش می خواهیم Qt را با MFC مقایسه کنیم ولی ابتدا باید شناختی را نسبت به MFC پیدا کنیم.
MFC چیست؟
MFC یا کلاس های پایه ای مایکروسافت[24] یک چارچوب کاری گرافیکی برای ویندوز است .این چار چوب شی گراست و بیشتر کلاس های این چار چوب کاری با استفاده از Win32 API نوشته شده است و خود Win32 API ها هم با استفاده از C/C++ نوشته شده اند.
اما مقایسه این دو چارچوب کاری:
کد نویسی در MFC همیشه نیاز به مستندات[25] و نمونه کد[26] ها دارد که باید همیشه از همان دستور العمل ها استفاده کنید تا به نتیجه مطلوب برسید ، اما شما با استفاده از Qt به راحتی با نگاه به مستندات می توانید بدون هیچ مشکلی بنویسید.
طراحی تماما شی گرای Qt :
Qt تماما شی گرا ساخته شده تا برنامه نویس بدون هیچ مشکلی بتواند خیلی سریع برنامه ی خود را توسعه دهد اما MFC از نظر شی گرایی طراحی مناسبی ندارد.
حلقه پیام ها:
MFC یک چارچوب کاری کاملا رویداد گراست که برای هر عملی شما نیاز به در یافت پیغام هایی خاص از طرف ویندوز دارید ، استفاده از این پیغام ها در کد نویسی اصلا آسان نیست زیرا هر پیغام برای عمل خاصی برای شما ارسال می گردد در حالی که شما کاملا نمی دانید هر پیغام برای چه عملی نیاز است.
برای مثال برای تشخیص عمل کلیک شدن روی یک شی شما می بایست پیغام WM_LBUTTONDOWN را دریافت کنید. یا برای استفاده از تایمر می بایست پیغام WM_TIMER را برسی کنید.
درواقع مسیر پردازش کلی برنامه تحت ویندوز به شکل زیر است:
(برای دیدن تصویر در اندازه ی مناسب روی تصویر کلیک کنید)
اما Qt با استفاده از موتور داخلی تولید و مدیریت اشیا این اعمال را بر عهده گرفته تا برنامه نویس بدون نیاز به درگیر شدن با پیغام های سیستم عامل بتواند برنامه خود را توسعه دهد.
Qt با استفاده از مفاهیم سیگنال ها [27]و اسلات ها[28] این عملیات را انجام می دهد ، این مکانیزم شی را از دریافت پیغام های سیستم عامل بی نیاز می کند.
پشتیبانی از چند سکویی:
اما اگر بخواهیم مهم ترین تفاوت این دو چارچوب کاری را نسبت به هم بررسی کنیم می توانیم این را بگوییم که Qt کاملا از چند سکویی پشتیبانی می کند در حالی که MFC فقط برای برای برنامه های تحت ویندوز ساخته شده است.
این دو چارچوب کاری را می شود از لحاظ های مختلفی مورد مقایسه قرار داد از جمله ، مستند سازی ، تولید اشیا ، مدیریت منبع و... که ما در این مقاله از مقایسه این خصوصیات صرفه نظر می کنیم.
نتیجه گیری :
مزایا و معایب این چارچوب کاری را می توان به این صورت بیان کرد :
مزایا :
- پشتیبانی از چند سکویی
- تولید کد محلی سیستم عامل که هم باعث سرعت بالای اجرا می شود و هم امنیت کد منبع را بالا می برد.
- منبع باز بودن این چارچوب کاری ، که باعث می شود با سرعت بالایی توسعه پیدا کند و خطا های آن بر طرف شود.
- پشتیبانی از چندین زبان برنامه نویسی مانند C++ ، جاوا ، پایتون و...
- و در نهایت مستند سازی بسیار خوب این چارچوب کاری که به برنامه نویس این امکان را می دهد تا خیلی سریع و راحت مشکل خود را برطرف کند
معایب :
- یکی از بزرگترین معایب این چارچوب کاری بالا بودن قیمت نسخه تجاری ای چارچوب کاری می باشد.
- کمبود کامپوننت ها و ویدجت ها که باعث میشه سرعت توسعه کند شود.
- با اینکه Qt کاملا از پایگاه داده های مختلف مانند SQL Server پشتیبانی می کند اما بخاطر کمبود ابزار ها و کامپوننت ها مانند ابزار گزارش گیری کامل کار با پایگاه داده ها را سخت می کند.
منابع:
- خود آموز Visual C++.net در 21 روز /دیویس چپمن ؛ مترجم سیلوی داوودیان—تهران موسسه ی فرهنگی هنری دیباگران تهران،1384
- Pascal Audox translate by Philips fremy ; 2005/07/03;Impressions on MFC Vs Qt programming
- MFC vs Qt
- ايتنا - چرا Qt؟
- ايتنا - 10 کاربرد Qt که تا به حال نمیدانستید!
[1] Microsoft
[2] Frame Work
[3] .Net
[4] Developers
[5] Platform
[6] Cross-Platform
[7] Harvard Nord
[8] Eirik chamber Eng
[9] کیوت
[10] Nokia
[11] Troll tech
[12] Source Code
[13] Java
[14] Python
[15] Embedded OS
[16] Open Source
[17] IDE
[18] Plug-in
[19] Add-in
[20] GNU C Compiler
[21] Microsoft Visual C++
[22] Managed Code
[23] Native Code
[24] Microsoft Foundation Classes
[25] Documents
[26] Sample Code
[27] Signals
[28] Slots
موضوعات مشابه:
علاقه مندی ها (Bookmarks)