علوم کامپیوتر دانشگاه اصفهان

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

آموزش کیوت - قسمت سوم

شنبه, ۱ شهریور ۱۳۹۳، ۰۳:۳۷ ب.ظ

معرفی و کار با Signal و Slot ها و Event ها

مرحله سوم : معرفی و کار با Signal و Slot ها و Event ها


نکته : من قصدم اینه که در ساده ترین حالت آموزش رو ارائه بدم به خاطر اینکه افراد شاکی از کد نویسی زیاد C++‎‎‎‎ کمی دیدگاهشون رو در رابطه با این زبان تغییر بدن بد نیست... مخصوصا اونایی ک میگن کی حوصله داره تو C++‎‎‎ هزار خط کد بنویسه تا یه پیغام نمایش بده !!! 

سیگنال یا اسلات ها چین ؟ به چه دردی میخورن ؟ مسلما شما برای ایجاد یک رخداد در یک زمان با اثر گذاری بر روی یک کنترل یا Object انتظار اینو دارین که اون شیء در قبال فشرده شدن یا هر رویداد دیگه ای یک عکس العملی نشون بده مثلا روی یک دکمه ای کلیک میکنید انتظار دارید یه پیغامی در رویداد Clicked اون نمایش داده بشه منظور از Signal و Slot در رابطه با این مسائل هستش که حالا در این میان برای صدا زدن از Signal استفاده میکنیم و از Slot برای دریافت دستور و عمل کردن.

من قصد دارم برای شروع کار روی یک فرمی 2 تا دکمه ایجاد کنم و روی این دوتا دکمه 2 از رویداد (Clicked) کلیک شدن استفاده کنم.

خب به قسمت Forms در پروژه برید و روی فایل mainwindow.ui دوبار کلیک کنید تا محیط طراحی فرمتون رو ببینید به صورت زیر دو تا دکمه با عمل Drag and Drop روی فرم خودم ایجاد میکنم در صورتی که کامپایل و اجرا کنید دکمه های ایجاد شده رو روی فرمتون میبینید ولی بدون هیچ عملی ! 


Name:  start-6.jpg
Views: 706
Size:  99.1 کیلوبایت


بر خلاف Visual Studio و زبان C#‎‎‎‎ که روی Object ها کلیک میکنید و تابع مربوط به رویداد اون ساخته میشه و شما شروع میکنید به برنامه نویسی در Qt چنین چیزی وجود نداره در کل توی C++‎‎‎‎ کلیک کد کد بنویس بی معنیه باید کوهو بکنی تا بتونی دستور بدی به رویداد ها.... ولی من یه روش ساده تری رو بهتون میگم به صورت زیر روی کنترل راست کلیک میکنیم و گزینه Go to Slot رو انتخاب میکنیم.

Name:  start-7.jpg
Views: 686
Size:  33.1 کیلوبایت


خب حالا طبق تصویر زیر مشاهده میکنید که تمام رخداد های مربوط به کنترل مورد نظر شما قابل انتخاب هستند ما در این بخش لازمه از رویداده Click استفاده کنیم پس روش کلیک کنید و برید مرحله بعد.

Name:  start-8.jpg
Views: 685
Size:  29.4 کیلوبایت


خب حالا اینجا تابع مربوط به عمل کلیک شدن روی این دکمه ایجاد شده.



void MainWindow::on_pushButton_clicked()
{

}



در فایل mainwindow.h کد زیر اضافه شده که تعریف Slot مربوط به کنترل میباشد.


private slots:
void on_pushButton_clicked();



منظور از pushButton نام همان دکمه ای هستش که روش کلیک میشه مسلما نام دکمه بعدی pushButton_2 خواهد بود ! شما میتونید این تابع رو بدون عملیاتی که در تصویر دیدین ایجاد و به هر یک از کنترل های خودتون اختصاص بدین.

حالا این بخش مشخص کرد که ایجاد Event های مربوط به کنترلر ها چطور صورت میگیره به صورت کد نویسی این روش هارو میشد بریم ولی خواستم ساده ترین حالتش رو نشونتون بدم تا عوض اونهمه کد نویسی در C++‎‎‎‎ به صورت عادی در بیاد.

برای اینکه این بحث رو یجورایی کامل کنم میخوام یه پیغامی رو با کلیک روی این دکمه نمایش بدم پس طبق قوانین C++‎‎‎‎ ابتدا هیدر Message رو فراخوانی میکنم که در کیوت هستش QMessageBox به صورت زیر :


#include "qmessagebox.h"



و کد زیر رو در داخل تابع رخداد کلیک مینویسم :


QMessageBox msgBox;
msgBox.setText("Welcome to the Qt 5.2 , My name is Kambiz Asadzadeh");
msgBox.exec();



کاملش هست :


void MainWindow::on_pushButton_clicked()
{

QMessageBox msgBox;
msgBox.setText("Welcome to the Qt 5.2 , My name is Kambiz Asadzadeh");
msgBox.exec();

}




خب حالا باید بعد از کامپایل و اجرا هنگام کلیک روی دکمه Show Message خروجی بشه مثل زیر : 

Name:  start-9.jpg
Views: 684
Size:  62.6 کیلوبایت



فایل پروژه رو هر مرحله که آموزش به اتمام میرسه به صورت زیر ضمیمه خواهم کرد.

موافقین ۱ مخالفین ۰ ۹۳/۰۶/۰۱
سعید جزی

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی