قسمت اول آموزش Qt

آشنایی با Qt Framework

نرم افزار K Desktop Environment که به طور اختصار KDE نامیده می شود یکی از پرکاربردترین و کامل ترین محیط های گرافیکی برای سیستم های بر پایه لینوکس است. لازم است بدانید که این محیط کاری بر اساس تکنولوژی Qt توسعه داده شده است. بنابراین به نظر می آید، برای برنامه نویسی تحت سیستم عامل لینوکس، استفاده از این محصول شرکت Troll Tech بهترین ایده باشد.

قالب کاری Qt، مجموعه ای از کلاس های ++C­­­ است که کاربرد آن ها ایجاد نرم افزارهای قابل کامپایل در پلت فرم های مختلف از قبیل ویندوز، لینوکس، سولاریس و یا HP-UX می باشد. یعنی یک بار کدنویسی کنید و چندین بار کامپایل کنید. نرم افزارهای تولید شده توسط Qt قابلیت اجرا بر روی اکثر سیستم های لینوکس که دارای سرویس دهنده X11 می باشند را دارا هستند.

شهرت اصلی Qt به علت multi platform بودن آن است. اما به علت قدرت بالایی که API آن دارد، تولیدکنندگان بسیاری، از آن برای توسعه نرم افزارهای Single Platform نیز استفاده کرده اند.

نرم افزارAdobe Photoshop Album یک نمونه از نرم افزار هایی است که با استفاده از Qt برای پلت فرم ویندوز ایجاد شده است. همچنین تعداد زیادی از نرم افزارها، با کاربردهای ویژه که پیچیدگی های بسیار زیادی دارند، از قبیل برنامه های پویا نمایی سه بعدی، پردازش دیجیتال فیلم و اکتشاف گاز و نفت با استفاده از Qt ساخته شده اند. اگر شما با استفاده از Qt نرم افزاری را تحت سیستم عامل ویندوز ایجاد کرده باشید به راحتی می توانید آن را در دنیای لینوکس و مکینتاش هم به فروش برسانید، برای این کار تنها به کامپایل مجدد و کمی کار با کتابخانه مورد استفاده آن نیاز دارید.

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

علاوه بر صدها کلاس و تابعی که خود Qt در اختیار شما قرار می دهد، پروژه های متن باز (open source) زیادی هم وجود دارد که قابلیت های جدیدی را به آن اضافه می کنند. برای آشنایی با این ماژول ها به اینجا مراجعه کنید.

همان طور که قبلاً اشاره شد KDE محیط کاری گرافیکی است که بر اساس تکنولوژی Qt ساخته شده است. اولین نسخه KDE در سال 1996 ارائه شد یعنی یک سال پس از عرضه نسخۀ اول Qt. بعد از آن KDE خیلی زود به یک محیط گرافیکی معروف و کارآمد بر روی پلت فرم های لینوکس تبدیل شد. در طی چندین سال کلاس های زیادی نیز ایجاد شدند که اکثر آن ها خواص خود را از یک یا چند کلاس Qt به ارث برده اند. شما می توانید براحتی با استفاده از کلاس های Qt نرم افزار خود را تولید کنید، ولی در صورتی که کلاس های KDE را به کار برید نرم افزار شما با محیط کاری KDE هماهنگی بیشتری خواهد داشت.

برنامه ای که توسط Qt ایجاد می شود یک نرم افزار رویدادگرا می باشد. به این صورت که برنامه شروع به کار می کند و پنجره یا پنجره هایی در صفحه نمایش نمایان می شوند و منتظر ورودی کاربر از طریق موشواره یا صفحه کلید می ماند. هر چیزی که در صفحه نمایشگر ظاهر می شود یک Widget ( تعجب نکنید واقعاً به همه آن ها چیز گفته می شود) نامیده می شود. پنجره ها، دکمه ها، منوها و غیره، همگی Widget می باشند. هر Widget می تواند در برگیرنده یک یا چند Widget دیگر نیز باشد. در واقع برنامه نویس برای ایجاد قسمت گرافیکی نرم افزار خود تنها باید همین چیزها را کنار یکدیگر قرار دهد و آن ها را فعال سازی کند تا در مقابل رویداد های صفحه کلید یا موشواره اعمال مورد نظر را انجام دهند.

در این جا تعریف علمی تری از Widget بیان می کنیم. به هر کلاسی که از کلاس QWidget ارث بری داشته باشد Widget گفته می شود. اگر با Java آشنایی داشته باشید یقیناً با مفهوم Widget مشکلی نخواهید داشت. در واقع همان طور که از معنای تحت الفظی این کلمه بر می آید، هر چیزی که در صفحه نمایش داده می شود یک Widget (چیز) است. کلاس QWidget شامل پنجره های قابل نمایش می باشد. با استفاده از متد های درون این کلاس می توان پنجره ها را مدیریت کرد و عملکرد های متناسب با وظایف برنامه را در رابطه با رویداد های موشواره و صفحه کلید تعیین کرد. به عنوان مثال می توان خواص خود Widgwet ها را با توجه به رویداد های رخ داده تغییر داد. مثلاً رنگ زمینه یک پنجره یا موقعیت آن در صفحه نمایش و یا اندازه آن را تغییر داد. شما می توانید در برنامه خود از Widget های موجود در Qt یا KDE استفاده نمایید ویا حتی با استفاده از کلاس QWidget چیزهای جدیدی متناسب با نیاز های خود ایجاد کنید و به کار برید. به خاطر داشته باشید که هر گاه نام یک کلاس با حرف Q شروع شده باشد، می تواند نشان دهنده این مطلب باشد که این کلاس مطعلق به قالب کاری Qt است و اگر با حرف K شروع شده باشد به احتمال زیاد مربوط به کلاس های KDE می شود.

در شکل زیر ساختار یک برنامه ایجاد شده در محیط KDE را مشاهده می کنید:


در برنامه نویسی برای محیط گرافیکی KDE، بیشتر با لایه های دوم و سوم سرو کار داریم. در واقع کار Qt هم، همین است. یعنی Qt ما را قادر می سازد بدون نیاز به پرداختن به لایه های پایین تر و با استفاده از توابعی که در لایه های بالایی در اختیار ما هست به برنامه نویسی بپردازیم. برنامه های تولید شده توسط ما در واقع همان بالاترین لایه، یعنی Application را تشکیل می دهند.

در این جا با سلسله مراتب این لایه ها آشنایی پیدا می کنیم و روابط بین آن ها را بررسی می کنیم

  1. لایه System:

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

  1. لایه glib:

این لایه نیز مجموعه ای از توابع C، ماکروها و ساختارهایی است که از طریق لایه های بالاتر مورد استفاده قرار می گیرند. در واقع glib کتابخانه ای است، شامل توابعی برای تاریخ و زمان، ورودی و خروجی، زمان سنج ها و تخصیص حافظه. همچنین توابع مفیدی برای کار با لیست ها، آرایه ها، درخت ها و حافظه cache را در اختیار ما قرار می دهد.

  1. لایه X11:

این لایه شامل توابع سطح پایین برای مدیریت رویداد های گرافیکی مربوط به موشواره و صفحه کلید می باشد. تمام توابع مورد نیاز برای مدیریت پنجره ها و پاسخ به رویداد های ماوس و صفحه کلید توسط X11 سرویس دهی می شوند.X11 سرویس دهنده گرافیکی پایداری است که گاهی با نام X یا X11R6 هم از آن یاد می شود.

  1. لایه C++ API:

از آن جا که لایه های بالاتر توسط C++ ایجاد شده اند، این API برای پیاده سازی اشیائی که در لایه های بالایی ایجاد می شوند در این جا قرار می گیرد.

  1. لایه Qt Classes:

این لایه هم شامل توابع Qt هست که به زبان C++ نوشته شده اند.

  1. لایه KDE Classes:

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

  1. لایه Application:

در این جا با دو اصطلاح جدید آشنا می شویم، که عبارتند از Qt Application و KDE Application.

Qt Application آن دسته از نرم افزارها هستند که شیئ QApplication را برای مقدار دهی اولیه خود به وجود می آورند، در حالی که دسته دوم (یعنی KDE Application ها) شیئ KApplication را ایجاد می کنند.در سلسله مراتب وراثت، کلاس KApplication از کلاس QApplication وراثت گرفته است و علاوه بر این، استاندارد های مربوط به محیط گرافیکی KDE را شامل می شود.