آموزش برنامه‌نویسی با کیوت / سی‌+‌+ (جلسه اول)

در جلسه قبل برخی مطالب  ساده و ابتدایی در کیوت را معرفی و آموزش دادیم. در آن قسمت با نحوه استفاده از کلاس کیو-اپلیکیشن «QApplication» و دیگر کلاس‌های مورد استفاده در کیوت مانند کلاس دکمه «QButton» یا نقشک «QIcon» و قلم «QFont» آشنا شدید که در آموزش قبلی یک کادر کوچک دارای یک دکمه با ظاهر سفارشی را ایجاد کردیم. در این قسمت که جلسه اول از این مقاله آموزشی بعد از مقدمه در قسمت قبل است به معرفی بیشتر کلاس‌ها در کیوت و نحوه استفاده از چند کلاس دیگر خواهیم رسید و آموزش استفاده از برخی کلاس‌های کاربردی را نیز در این جلسه، خواهم نوشت تا برنامه‌نویسان نا آشنا با مفاهیم کلاس بتوانند از کیوت استفاده بیشتری داشته باشند.

در مثال قسمت قبل دیدید که برای استفاده از تصویر برای نمایش در دکمه از مسیر یک تصویر که در دیسک سخت به صورت دستی ذخیره کرده‌بودم، استفاده کرده و توانستم آن را در دکمه نمایش دهم. برای اینکار نمونه‌ای از  کلاس QIcon را در برنامه به شکل یک شیء ایجاد کردم و سپس آدرس تصویر مورد نظر را به آن نسبت دادم. در اکثر سیستم‌عامل‌های امروزی برخی نقشک‌ها وجود دارند که در اکثر برنامه‌ها یا حتی خود سیستم‌عامل مورد استفاده هستند. به عنوان نمونه همه پخش‌کننده‌های موسیقی از نقشک‌های خاصی برای پخش یا وقفه در پخش یک موسیقی استفاده می‌کنند که از طریق نقشک نصب شده در سیستم، به سیستم‌عامل افزوده شده‌اند. در سیستم‌عامل گنو/لینوکس نقشک‌ها بر اساس استانداردی که از طرف بنیاد رومیزی آزاد «Free Desktop» مشخص شده است در برنامه‌ها مورد استفاده قرار می‌گیرند. به عنوان نمونه نقشک‌ها در پوشه‌ای خاص در شاخه «/usr/share/icons» قرار می‌گیرند و بر اساس نام‌گذاری وضع شده توسط بنیاد رومیزی آزاد، در آن پوشه نقشک‌های مختلف قرار گرفته و تحت عناوین و شاخه‌های مختلف نام‌گذاری شده‌اند. حال اگر نرم‌افزاری بخواهد از نقشک‌ها استفاده کند باید نام نقشک‌ها را بداند. لیست نقشک‌ها را می‌توانید از پایگاه اینترنتی بنیاد مذکور مشاهده کنید.

در اینجا نیز ما قصد داریم، از نقشک آدمک خندان که در مثال قسمت قبل استفاده کردیم به صورت دیگری استفاده کنیم. یعنی به جای نوشتن آدرس کامل آن نقشک در دیسک سخت، از نام نقشک استفاده می‌کنیم که کیوت به دنبال آن نقشک در قالب نقشک نصب شده گشته و بعد از یافت آن نقشک، آن را نمایش خواهد داد. مثلا اگر ما به دنبال نقشکی با نام «firefox» باشیم، نقشک برنامه موزیلا فایرفاکس برای ما نمایش داده خواهد شد. همانطور که گفتیم می‌خواهیم کد مثال قبل را به شکلی تغییر دهیم که نقشک خود را از نقشک‌های سیستمی استفاده کرده باشد. برای این‌کار قسمتی از کد برنامه قبل را به کد نوشته شده در زیر تغییر دهید. در سیستم‌عاملهای دیگر نقشک بنابر تنظیمات متغیر است. در اکثر مواقع نقشک پیش‌فرض کیوت نمایش داده می‌شود که یک نقشک ساده است. با این حال در هر برنامه می‌توانید نقشک‌های مختص به خود را مشخص کنید. مثلا برنامه را مجبور کنید همواره از نقشک‌های قالب نقشک نامیکس «Numix» استفاده کند. در کد زیر که به جای خط کد دکمه در مثال قسمت قبل نوشته خواهد شد، ابتدا یک کلاس تعریف شده و سپس نقشک به واسطه آن کلاس به دکمه نسبت داده شده است.

QIcon Qicon::fromTheme ("smile-face");

روش دومی نیز وجود دارد که به جای آنکه ابتدا کلاس نقشک در کیوت را معین کرده وشیء‌ای از آن بسازید، مستقیما از کلاس فوق در دکمه استفاده کرده و نقشک مورد نظر را به دکمه اختصاص دهید. کد زیر از روش مذکور استفاده می‌کند. همانطور که مشخص است کد زیر کدی کوتاهتر نسبت به کد بالا به شمار می‌رود. در هر شکل از استفاده خروجی یکسان خواهد بود. یعنی دیگر قبلا یک شیء کیو-آیکن تعریف نمی‌کنیم که آن را به دکمه نسبت دهیم و به جای اینکار مستقیما از کد زیر استفاده می‌کنیم.

button.setIcon(QIcon::fromTheme("face-smile"));

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

#include <QApplication>
#include <QPushButton>

int main(int argc, char **argv)
{
 QApplication app (argc, argv);

 QPushButton button;
 button.setText("  سلام دوستان عزیز این زیباتر است  ");
 button.setToolTip("A tooltip");
 QFont font ("B Yekan");
 button.setFont(font);
 button.setIcon(QIcon::fromTheme("face-smile"));
 button.show();

 return app.exec();
}

کدهای بالا را با استفاده از نقشک چکش واقع در پایین و سمت چپ نرم‌افزار محیط توسعه کیوت، کلیک می‌کنیم تا برنامه از نوع کامپایل و ساخته شود؛ سپس بر روی نقشک اجرا که به شکل یک مثلث سه گوشه سبز رنگ است کلیک می‌کنید تا برنامه اجرا شود. بعد از اجرای برنامه نقشک آدمک خندان نمایش داده خواهد شد. نقشک زیر از  قالب نقشک نسیم «Breeze» در محیط رومیزی کی‌دی‌ای و پلاسما ۵ استفاده کرده است. اگر در توزیع و محیط رومیزی شما از  قالب نقشک دیگری استفاده شده است، این نقشک متفاوت خواهد بود. اما ماهیت نقشک که یک آدمک خندان است، در تمام قالبها یکی است.

qt-tut-01نکته؛ در قسمت قبلی فردی از من پرسید که چرا نرم‌افزار محیط توسعه کیوت «Qt Creator»، مورد استفاده من به رنگ تیره و مشکی است؟ در جواب باید بگویم که نرم‌افزار فوق دارای دو قالب کلی تیره و روشن است که قالب تیره از بخش تنظیمات قابل انتخاب است در همان بخش و در بخش ویرایشگر «Editor» نیز می‌توانید نوع قلم نوشته‌ها و دیگر تنظیمات ویرایشگر کد را به همراه رنگ آن تغییر دهید که در صورت دلخواه آن را نیز بر روی گزینه تیره بگزارید تا با قالب اصلی برنامه هماهنگ شود بعد از این تغییرات، نرم‌افزار فوق، همانند تصاویر به شکل تیره در خواهد آمد. اگر از محیط رومیزی کی‌دی‌ای و پلاسما نسخه ۵ نیز استفاده می‌کنید: می‌توانید وارد بخش قوانین کی‌وین شده «KWin» و برای نرم‌افزار فوق قانون جدید نوشته و در آن قانون رنگ نوار عنوان را به قالب رنگی تیره انتخاب کنید. برای آنکه رنگ نوار عنوان با نرم‌افزار هماهنگتر باشد می‌توانید از قالب رنگی سفارشی جدیدی استفاده کنید. ساخت قالب رنگی در کی‌دی‌ای از طریق تنظیمات کی‌دی‌ای «KDE System Settings» و بخش رنگ «Color» قابل انجام است.

qt-tut-03نگاهی اجمالی بر کلاس‌ها در کیوت

کلاسها مفاهیم مهمی در زبان‌های برنامه نویسی شیءگرا هستند. شیء گرایی مفهومی است که در زندگی خود نیز با آن مواجه هستید؛ به عنوان نمونه همه چیز در اطراف شما یک شیء به شمار می‌رود. اشیاءی مثل شیء کتاب، شیء میز، شیء صندلی و … که هر یک از این اشیاء دارای خصیصه و خصایص مختلفی هستند. به عنوان مثال شیء کتاب از خصوصیاتی مثل رنگ جلد، نام نویسنده، تعداد صفحات، ویرایش چندم، انتشارات و … است که تمامی این موارد هویت یک کتاب به صورت عمومی و عام  را تشکیل خواهند داد. اگر کتاب به صورت عام را یک کلاس در نظر بگیرید. کتاب‌های مختلفی وجود دارند که هر یک، از خصایص مختص و خاص خود را دارند ولی وقتی به صورت کلی بگوییم کتاب، ما کتاب خاصی را مدنظر نداریم و فقط کتاب را به عنوان مفهومی عمومی که شامل کتب مختلف می‌شود، مورد اشاره داشته‌ایم.

کلاس‌ها نیز مفاهیم عامی از هر شیء هستند که مختصات و کلیات یک شیء را مشخص می‌کنند. به صورتی که یک شیء را در صورت تعریف بتوان از شیء دیگر تمیز داد. مثلا شیء دکمه در یک زبان برنامه نویسی. این شیء دارای مختصات خاص خود است؛ اما تا زمانی که نام دکمه ۱ تعریف نشود مفهومی عام است. سپس اگر این دکمه به عنوان شیء نمونه از کلاس عام  (مثلا QButton) ساخته شود، آنگاه این دکمه به صورت خاص قابل شناسایی است. همانند دنیای طبیعی که در مثال قبل به آن اشاراتی داشتیم.

اکثر اشیاء با اشیاء دیگر روابط و اشتراکاتی دارند. مثلا شیء یا کلاس سگ و گربه هر دو مشابه اند. هر دوی این اشیاء زیر مجموعه شیء بزرگتری با نام حیوان هستند و شامل حیوانیت می شوند. اگر به صورت جزئی تر نیز نگاه کنیم،  هر دو در کلاس پستانداران نیز جا می‌گیرند که کلاس پستاندار نیز خود نوعی حیوان است.  حال اگر در یک زبان برنامه‌نویسی مثلا بخواهیم کلاس گربه را مشخص کنیم؛  ابتدا کلاس مادر یعنی حیوانات را ساخته و کلاس دیگری را می‌سازیم که منشعب از آن است؛ یعنی کلاس پستاندار و سپس برخی مشخصه‌ها را تغییر داده و برخی مشخصه‌ها را جدیدا تعریف می‌کنیم. مثلا اگر در کلاس حیوانات مشخصه‌ای کلی از ظاهر حیوان وجود دارد، آن مشخصات را مشخص می‌کنیم اما  در کلاس پستاندار مشخصات جزئی و مختص به پستانداران را از مختصات کلی حیوان متمایز می‌کنیم. برای ایجاد کلاس گربه نیز می‌آییم و می‌گوییم گربه چه مواردی را همانند پستانداران دیگر دارد و در آن با دیگران مشترک است؟ سپس آنان را نگاه داشته و آن مشخصات متفاوت با دیگران را مشخص و یا تغییر می‌دهیم. برای سگ نیز چنین می‌کنیم.

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

مفاهیم شیء گرایی ماهیم مهمی هستند که در این مقاله کوتاه توضیح همه موارد قابل انجام نیست؛ بنابراین اگر می‌خواهید درک بهتری از برنامه‌نویسی شیء‌گرایی داشته باشید؛ می‌بایست، کتب آموزش برنامه نویسی شیء گرا را مطالعه کنید تا درک بهتری از این مفهوم داشته باشید. در کیوت نیز به دلیل آنکه از زبان برنامه‌نویسی سی++ استفاده شده است، کلاس‌ها مفاهیم مهمی در آن به شمار می‌روند.پس با مطالعه شیء گرایی در زبان سی++ درک بهتری از کیوت و برنامه نویسی در آن خواهید داشت. (مفهوم ارث بری و چند ریختی به طور کامل از کتب مربوط به برنامه نویسی  به زبان سی++ نیز مطالعه شود)

در کیوت نیز همانند مثال بالا کلاس‌هایی کلی و مادری تعریف شده‌اند که از خصایص عمومی برخوردار هستند؛ سپس کلاس‌هایی دیگر مشابه با آن کلاس‌ها به صورت جزئی ایجاد شده‌اند که زیر مجموعه آن کلاس‌های مادر یا والد خود هستند. مثلا کلاس کلی در کیوت شیء-کیوت «QObject» است که دارنده مشخصات کلی یک شیء در کیوت است. همه اشیاء در کیوت دارای خصایص مشخصی هستند که در این کلاس وجود دارد.

کلاس ابزار-کیوت «QWideget»، نیز کلاسی است که تمامی مشخصات ابزارها به صورت عمومی را در خود داراست. مابقی ابزارهای مورد استفاده برای نمایش عناصر بصری مانند یک دکمه یا یک کادر متنی از این کلاس منشعب شده‌اند. کلاس‌های دیگر نیز  همین‌طور بر اساس دسته‌بندی و مشخصاتشان از هم دیگر، منشعب شده‌اند. شما نیز اگر بخواهید کلاس یا مورد جدید را در کیوت تعریف کنید باید کلاس خود را ساخته و از کلاس دیگر منشعب شوید و با تغییر مقادیر مورد نظر، یک شیء دلخواه ایجاد کنید. در زیر درختی از کلاس‌ها و دسته‌بندی آنان در کیوت قابل مشاهده است.

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

  • Object name؛

نام شیء در هر کلاس بسیار مهم است و برای ساخت یک نمونه باید هر شیء یک نام داشته باشد تا بتوان آن را از دیگر اشیاء تمیز داد. نام اشیاء از قوانینی مانند قوانین نامگذاری متغیرها در سی++ است.

  • Parenting system؛ 

در مثال‌های بالا به خوبی توضیح داده شد؛ در کیوت سیستم والدین، به همان موردی که در مورد حیوان و پستاندار و گربه و سگ اشاره داشتیم، اشاره دارد. یعنی هر کلاس دارای زیر شاخه‌هایی است که در نکات کلیدی با هم یکسان هستند.

  • Signals and Slots؛ 

در زبان‌های برنامه‌نویسی مانند سی‌شارپ از مفاهیمی مانند رویداد برای نوشتن دستورات استفاده می‌شود که در کیوت از سیگنال و اسلات استفاده می‌شود. این مفاهیم در ادامه مطلب توضیح داده خواهند شد.

  • Event management؛

مدیریت رویداد نیز در کیوت بسیار ساده است این مورد را نیز توضیح خواهیم داد.

مدیریت رویدادها؛ مدیریت رویدادها بخش مهمی از نوشتن برنامه‌نویسی بصری با واسط گرافیکی کاربر «GUI» را تشکیل می‌دهد. در برنامه‌های گرافیکی شما نیاز دارید بر یک ابزار بصری کلیک کرده و یا اینکه تمامی رویدادهای قابل انجام در برنامه مانند کشیدن و رها کردن و … را مدیریت کنید. برای مدیریت و شناسایی این رویدادها، باید از مدیریت رویداد استفاده کرد که در هر زبان برنامه نویسی روش خاصی مورد استفاده قرار گرفته است. در یک برنامه بصری معمولا باید از چند نکته به طور کامل اطلاع  داشته باشید. این موارد برای مدیریت رویدادهای رخ داده در یک برنامه بصری مهم هستند تا با استفاده از این اطلاعات، عملیات مورد نظر را اجرا کنید. اطلاعات مورد نیاز معمولا از قرار زیر اند.

  • منبع رویداد؛

منبع رویداد معمولا به شیءی اشاره دارد که رویداد خاص بر آن اعمال شده است. مثلا زمانی که یک نوار لغزنده را در جهت چپ و راست یا پایین یا بالا می‌کشید؛ منبع رویداد همان نوار لغزنده است.

  •  رویداد رخ‌داده؛

رویداد رخ‌داده نیز یکی از اطلاعات مهمی است که در هر رخداد باید مشخص باشد، مثلا اگر بر روی دکمه کلیک کنید رخ‌داد کلیک «Click» و اگر متنی را در کادر متنی تغییر دهید؛ رخ‌داد تغییر متن «Text Changed» اجرا می‌شود.

  •  مقصد رخ‌داد؛

مقصد رخ‌داد نیز برای مشخص کردن این است که بعد از رخداد باید چه اتفاق بافتد یا مشخصات چه رخدادی تغییر یابد.

مدیریت رویدادها در کیوت با استفاده از مکانیسم سیگنال و اسلات انجام می‌شود. به شکلی که هنگامی که بر روی یک دکمه کلیک می‌کنید سیگنال کلیک کردن از شیء دکمه را به یک تابع از کلاس دیگر ارسال می‌کنید که آن تابع در کلاس دیگر به عنوان اسلات مشخص می‌شود و به راحتی می‌توانید دستورات داخل آن تابع را اجرا کنید. همچنین می‌توان با استفاده از سیگنال و اسلات، دو عدد خصیصه را با هم مرتب کنید.

در کیوت زمانی که شما برنامه کیوت خود را به وسیله «QApplication» اجرا می‌کنید و برنامه توسط «exec.» اجرا می‌شود، برنامه در پس زمینه منتظر اجرای رویداد خاص بر هر یک از اشیاء بصری برنامه است؛ تا بتواند دستورات از پیش تعیین شده برای هر رویداد را اجرا کند. برای آنکه در کیوت مشخص کنیم که برای هر یک از رویدادها چه واکنشی انجام شود؛ باید از طریق سیگنال و اسلات عمل کنید. به طور کلی روش استفاده از سیگنال و اسلات به شکل زیر است.

connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));

در کد بالا زمانی که بر روی دکمه  خروج کلیک شود؛ رویداد خروج از برنامه اجرا می‌شود. یعنی دکمه و رویداد کلیک ماوس به عنوان سیگنال و دستور خروج از برنامه را به عنوان اسلات نوشته‌ایم. با نگاه دقیق به کد بالا متوجه نحوه کار سیگنال و اسلات و چگونگی نوشتن کد به این صورت شده و سریعا آنرا خواهید آموخت. برای درک بیشتر موضوع یک برنامه بسیار ساده را در کیوت خواهیم نوشت که با کلیک بر دکمه خروج از برنامه خارج می‌شود. با درک کد فوق خواهید توانست با افزودن اشیاء و موارد بیشتر برنامه‌های جالبتر را نیز اجرا کنید.

برای نوشتن برنامه فوق ابتدا برنامه محیط توسعه پیش‌فرض کیوت «Qt Creator» را اجرا کرده  و از طریق دکمه ایجاد پروژه جدید، همانند قسمت قبلی یک پروژه خالی را ایجاد کنید که در آن تنها یک فایل با پسوند «pro.» وجود دارد. بعد از ساخت پروژه با نام  «Simple Exit» یا هر نام دلخواه دیگر، یک فایل با نام «click.h» ساخته و مقادیر زیر را در آن وارد کنید.

#pragma once

#include <QWidget>

class Click : public QWidget
{
  public:
    Click(QWidget *parent = 0);

};

نحوه ساخت و ایجاد یک فایل سرآیند همانند ساخت یک فایل سی++ و از طریق روش گفته شده در قسمت قبلی این آموزش، گفته شده است. با این تفاوت که در کادر باز شده برای ساخت فایل، به جای سورس «Source» گزینه سرآیند «Header» را انتخاب می‌کنید.بعد از ساخت فایل سرآیند، فایل سورس را نیز با مقادیر زیر ساخته و با همان نام ولی با پسوند متفاوت سی++ «cpp.» می سازیم. مقادیر زیر را در فایل ایجاد شده نوشته و ذخیره کنید.

#include <QPushButton>
#include <QApplication>
#include "click.h"

Click::Click(QWidget *parent)
    : QWidget(parent)
{
  QPushButton *quit = new QPushButton("Quit", this);
  quit->setGeometry(50, 40, 75, 30);

  connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
}

کدهای نوشته شده بالا جمعا تشکیل یک کلاس را می‌دهند که توسط خود ما نوشته شده‌اند. این کلاس را ما کلیک نام‌گذاری کرده‌ایم و تعریف کلاس فوق در دو فایل سرآیند و سورس انجام شده است. یعنی ما مقادیر و تعاریف کلی را در سرآیند و استفاده از آن تعاریف و نوشتن بدنه کد کلاس را در فایل سی++ انجام داده‌ایم. کلاس فوق به خودی خود، قابل اجرا نیست؛ مگر آنکه یک فایل اصلی با نام «main.cpp» ایجاد کرده و کلاس فوق را در آن تعریف و استفاده کنیم.

#include <QApplication>
#include "click.h"

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);  
    
  Click window;
  
  window.move(300, 300);
  window.resize(250, 150);
  window.setWindowTitle("Click");
  window.show();

  return app.exec();
}

اگر فایل فوق را ایجاد کردید، باید پروژه را نیز تنظیم کنید. برای تنظیم پروژه اگر مانند ما پروژه را به پشکل خالی ایجاد کرده‌اید؛ باید خود مقادیری را به فایل پروژه بیفزایید. برای مثال مشخص کنید که نام برنامه بعد از کامپایل چه باشد یا اینکه کلاس‌ها و مابقی موارد استفاده شده کیوت را در پروژه مشخص کنیم. اگر فایل پروژه را باز کنید، مشخص خواهد شد که پروژه فقط فایل‌های داخل خود را می‌شناسد. در فایل فوق پارامترهای شناسایی دیگر موارد ذکر نشده است.

اگر به پوشه‌ای که پروژه در ان ذخیره شده است بروید و از طریق خط فرمان دستور زیر را اجرا کنید؛ فایل پروژه با برخی مقادیر پر خواهد شد. دستور و فایل ایجاد شده را در زیر مشاهده خواهید کرد.

ehsan@ETARCH ~/Public/Qt/Sample-Exit % qmake -project

بعد از اجرای دستور فوق به برنامه محیط توسعه کویت رفته و فایل فوق را مجدد باز کنید در صورت باز شدن فایل با مقادیری جدیدی مواجه خواهید شد؛ در بالای فایل مذکور مشخص شده است که این فایل توسط دستور کیو-میک ایجاد شده‌است.

######################################################################
# Automatically generated by qmake (3.0) Thu Jul 30 16:41:58 2015
######################################################################

TEMPLATE = app
TARGET = Sample-Exit
INCLUDEPATH += .

# Input
HEADERS += click.h
SOURCES += click.cpp main.cpp

بعد از مراحل فوق اگر روی دکمه چکش کلیک کنید با پیغام خطایی مبنی بر ناشناس بودن برخی کلاس‌ها مواجه خواهید شد. این خطا به این دلیل نمایش داده می‌شود که دستور فوق نیز کاملا پروژه را برای ما نساخت. برای کامل کردن فایل فوق خط زیر را زیر خط «TARGET» وارد کنید.

QT = core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

با افزودن مقادیر بالا در فایل پروژه عبارت زیر مقادیر وارد شده یعنی خط جلو عبارت «INCLUDEPATH» را نیز حتما پاک کنید. سپس روی شکل مثلثی کنار دکمه با نقشک رایانه در سمت چپ کلیک کرده و گزینه عرضه «Relase» را انتخاب کنید. مکان قرار گیری دکمه فوق را از تصویر زیر مشاهده می‌کنید.

qt-tut-05کد نوشته شده فوق همانطور که گفته شد؛ از یک کلاس سفارشی با نام کلیک استفاده می‌کند که یک کلاس ساده است. در کلاس فوق از یک شیء ویدجت استفاده شده است. در کیوت اگر شیء ویدجت استفاده شود، یک پنجره خالی نمایش داده خواهد شد. برای توضیحات بیشتر باید بگویم که ویدجت یک کلاس عمومی برای ابزار بصری است که تقریبا چیزی برای نمایش در آن وجود ندارد. اما به دلیل اینکه اگر از شیءی بدون والد استفاده شود، دور آن شیء یک کادر وجود خواهد داشت؛  از ویدجت برای نمایش پنجره استفاده کرده و موارد دیگر را به آن می‌افزاییم. به عنوان نمونه در مثال قبلی ما تنها یک دکمه داشتیم که چون والد نداشت، به دور آن یک کادر کشیده شده بود. همچنین در کلاس فوق ما با استفاده از سیگنال و اسلات، دکمه قرار داده شده در ویدجت را به دستور خروج متصل کرده‌ایم. بعد از اینکه کلاس فوق را نوشتیم، آن را در فایل اصلی برنامه با نام ویندوز «Windows» تعریف کردیم. سپس طول و عرض و دیگر مشخصات آن را در کد فایل اصلی مشخص کرده و با دستور اجرا «exec.» اجرا کردیم.

بعد از کلیک بر روی نقشک چکش و سپس نقشک مثلث شکل اجرای برنامه از سمت چپ برنامه. کلیک کنید تا برنامه کامپایل و اجرا شود. اگر احیانا به دلایلی برنامه اجرا نشد. خطا و مشکل را به رایانامه من ارسال کنید؛ تا دلیل عدم اجرا بررسی شود. در آخر زمانی که برنامه کامپایل و با موفقیت اجرا شود؛ خروجی برنامه مانند تصویر زیر خواهد بود. در صورتی که خطایی مشاهده نشد، اما برنامه نیز اجرا نشد! ابتدا  وارد پوشه کنار پوشه پروژه که با نام «build-Sample-Exit-Desktop-Debug» است، رفته و برنامه را که نامش در فایل پروژه مشخص شده‌است اجرا کنید.  (البته این مورد نادر است.)

qt-tut-04در این جلسه به معرفی کلاس و برخی مفاهیم پایه‌ای کلاس پرداختیم و همچنین نحوه استفاده از کلاس‌ها در کیوت را به طور کامل شرح دادیم. سپس با نحوه مدیریت رویدادها با استفاده از سیگنال و اسلات پرداختیم که یکی از مهمترین مباحث در نوشتن برنامه‌های بصری به شمار می‌رود. در قسمت‌های بعدی  این آموزش نیز با موارد بیشتری از کیوت/سی++ آشنا خواهید شد.

در آخر کد برنامه‌ها را در گوگل‌درایو ذخیره کرده‌ام که کد برنامه نوشته شده در جلسه قبل با تغییرات داده شده در خطوط اول این جلسه و همچنین کدهای نوشته شده در مثال دکمه خروج را از پیوندهای زیر می‌توانید دریافت کنید. تمامی پروژه‌های فوق با استفاده از نرم‌افزار محیط توسعه کیوت «Qt Creator» نوشته شده اند. با این حال استفاده از دیگر محیط‌های توسعه مانند نت‌بینز و ایکلیپس نیز کاملا آزاد است.

بعد از معرفی رویداد کلیک در این جلسه، در قسمت بعدی به معرفی دیگر رویدادهای مورد استفاده و ذکر مثالی از آنان خواهیم پرداخت. تمرین این جلسه نیز این است که برنامه ساده دکمه خروج را به شکلی تغییر دهید که ابتدا در داخل دکمه فوق یک عدد نوشته شود؛ به‌عنوان نمونه صفر، سپس هرگاه روی دکمه کلیک کردید، یک عدد به عنوان متنی دکمه فوق افزوده شود. یعنی از ۰ به یک الی آخر تغییر کند. اگر در انجام تمرین و یا نوشتن کدهای خود مشکلی داشتید در نظرات یا ارسال رایانامه سوال خود را بپرسید؛ تا جواب سوال برایتان از طریق رایانامه  ارسال شده یا در زیر نظرات نوشته شود.

وردپرس › خطا

یک خطای مهم در وب سایت شما رخ داده است.

دربارهٔ اشکال‌زدایی در وردپرس بیشتر بدانید.