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

خوب بلاخره به قسمت پایانی اشنایی با کیوت رسیدیم!

در این قسمت از این سری اموزش ها ما برنامه ای رو که در پنج قسمت قبل درست کردیم رو تکمیل میکنیم و کاری میکنیم تا وقتی کاربر روی دکمه برناممون کلیک کرد متن برچسبمون عوض شه و با پایان این قسمت ما در مجموع این شش قسمت با کلیت یک برنامه ساده کیوت اشنا شدیم .

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

خوب یکی از ویژگی هایی که کیوت رو نسبت به بقیه متفاوت کرده راهکار اون برای تعامل با رخدادهایی که در برنامه رخ میده!

در کیوت مکانیزمی تعبیه شده به اسم Signal & Slot که فلسفه این مکانیزم اینطوری که در برنامه ما که طبیعتا رویدادگراست وقتی که برای یک کنترل یا همون Widget یه شرایط خاص مثلا کلیک شدن پیش میاد اون کنترل از خودش یک نشونه مخصوص این رخداد رو ازاد میکنه که اصطلاحا Signal نامیده میشه ! خوب ما اگه بخواهیم برای این حالت از کنترلمون کدهایی رو بنویسیم باید این کدها رو در یک متد از کلاسمون قرار بدیم که اصطلاحا بهش Slot میگن و تنها چیزی که میمونه اینه که برنامه چطوری باید تشخیص بده وقتی در یک کنترل خاص رویداد خاصی رخ داد اون رو به کدوم Slot ارجا بده که کیوت این کار رو توسط تابع connect اجام میده!

شاید نتونسته باشم مطلبو خوب برسونم اما وقتی مثالو ببینید حتما متوجه میشید!

خوب اول از همه میریم سراغ فایل سرایندمون که همه چیز کلاسمون در اون تعریف میشه:

hello.h

به این فایل دو خط زیرو اضافه میکنیم:

private slots:

void showHello();

خوب همون طور که میبینید در کیوت نسبط به سی پلاس پلاس معمولی چیزهایی اضافه داریم که در اینجا public slots و private slots هست !

کاملا واضحه که داریم اول مشخص میکنیم که اسلات مورد نظرمون public یا private و بعد اونو تعریف اولیه میکنیم.

و اما در جایی که میخواهیم از مکانیزم سیگنال اسلات و یه سری چیز دیگه استفاده کنیم باید یه کد خاص رو به اون کلاس که فکر کنم شبیه یه ماکرو باشه رو اضافه کنیم!

پس کد Q_OBJECT رو به تعریف کلاسمون به این صورت اضافه میکنیم:

class hello : public QWidget

{

Q_OBJECT

خوب حالا که تعریف اولیه کردیم میریم سراغ فایل اصلی کلاسمون یعنی hello.cpp :

یک تابع جدید به کلاسمون اضافه میکنیم که همون اسلات ماست:

void hello::showHello()

{

QString str = QString::fromUtf8(“افتتاح سایت زنجان لاگ مبارک باد<br> www.zanjanlug.org”);

label->setText(str);

}

خوب در اینجا ما متغیری به نام str از نوع Qstring ساختیم و گفتیم تحت یونیکد utf8 باشه تا با فارسی مشکل نداشته باشیم و سپس متن برچسبمون رو این متغیر قرار دادیم.

تنها کاری که میمونه اینه که توسط تابع connect مبدا و مقصد و نوع سیگنال رو مشخص کنیم پس در تابع hello کلاسمون این تکه کد رو اضافه میکنیم:

connect(button, SIGNAL(clicked()),this,SLOT(showHello()));

خوب همون طور که میبینید مثل باقلوا داره منظور ما رو مشخص میکنه!!! در ارگومان اول این تابع کنترل مبدا ما مشخص میشه و در ارگومان دوم ما نوع سیگنال مورد نظر که در اینجا کلیک شدن هست مشخص میشه و در ارگومان سوم مقصد ما و در ارگومان چهارم ما نام اسلات ما مشخص میشه.

خوب اگر تغییراتو به درستی اعمال کنید و برنامه رو یک بار کامپایل و اجرا کنید و روی دکمه enter بزنید باید با صحنه زیر روبرو بشید:

در اخر کدهایی که در مجموع این شش قسمت تکمیل شدن رو ضمینه میکنم و خیلی راحت میتونید با زدن دستور:

./hello

این کدهارو اجرا کنید و برنامه رو ببینید .

برای دریافت برنامه اینجا را کلیک کنید.

به امید اینکه این سری از اموزش ها نظرتونو جلب کرده باشه امیدوارم به بزرگی خودتون خطاهای من رو در نوشتن تجربیات خودم در یادگیری این قالب قدرتمند برنامه نویسی ببخشید.

همینجا لازم میدونم باز از کسانی که در این مدت بنده رو راهنمایی کردن تشکر کنم از جمله جناب mtux و اقای اطهری امیدوارم همیشه موفق باشند.

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

علی یارتون

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>