سیگنال Signal و اسلات Slot در کیوت

 در این جلسه از مجموعه آموزش کیوت از صفر، می خواهیم به معرفی سیگنال و اسلات در نرم افزار qt بپردازیم. قبلاً در آموزش شروع کار با GUI در نرم افزار Qt به مفهوم سیگنال و اسلات در نرم افزار کیوت اشاره ای داشتیم. در این جلسه توضیح کامل تری از Signal و Slot بیان می کنیم.

what is signal and slot in Qt

مفهوم Event در زبان ++C

اما سیگنال و اسلات در نرم افزار کیوت چیست؟ برای پاسخ گویی به این سوال اجازه دهید ابتدا به مفهوم Event در زبان برنامه نویسی ++C اشاره ای داشته باشیم. البته Event مختص زبان ++C نیست و در بسیاری از زبان های برنامه نویسی  این مفهوم وجود دارد. Event مفهومی است برای خبردار شدن از بعضی رویدادها، و عملی مشابه اینتراپت دارد. برای مثال در برنامه تعریف می کنیم که هر گاه “رخداد حرکت ماوس به سمت چپ” به وقوع پیوست، به مقدار یک کانتر یک واحد اضافه شود. در این صورت برنامه به روال عادی خودش ادامه می دهد و هرگاه ماوس به چپ حرکت داده شد، کانتر یک واحد زیاد می شود. مثال پرکاربرد دیگری از مفهوم Event این است که خیلی اوقات می خواهیم موقع بسته شدن برنامه، پارامترهایی که تنظیم کردیم ذخیره شوند و در زمان اجرای بعدی، همان مقادیر load شوند. در این صورت شرط ذخیره اطلاعات، “وقوع Event یا رخداد بسته شدن” است.

مطلب پیشنهادی:  نحوه استفاده از سیگنال و اسلات در کیوت - نوشتن برنامه در Qt بدون استفاده از فرم ها

مفهوم سیگنال و اسلات در Qt

وقتی در نرم افزار کیوت روی یک کلید کلیک می کنید، با این کار یک Event رخ می دهد که در واقع “رخداد کلیک کردن” است. به همین ترتیب می توان رخدادهای زیادی را برای یک کلید در نظر گرفت، مثلاً “رخداد دابل کلیک کردن”، “رخداد فشردن”،” رخداد رها کردن”، و .. . در نرم افزار کیوت هر رخدادی باعث انتشار یک سیگنال می شود؛ مثلاً با کلیک روی یک کلید pushbutton، گفته می شود : ” سیگنال Clicked، emit شده است “. حال مسلماً نیاز داریم با کلیک کردن روی کلید pushbutton، یک سری دستورالعمل انجام شود. برای این منظور در نرم افزار کیوت، مفهوم اسلات تعریف شده است. اسلات را می توان مشابه تابع در زبان ++C در نظر گرفت، با این تفاوت که اگر بخواهیم یک تابع را اجرا کنیم، باید آن را در برنامه فراخوانی کنیم. اما اگر بخواهیم یک اسلات را اجرا کنیم، باید یک سیگنال emit کنیم. سپس سیگنال تعریف شده را به اسلات متصل نمائیم. در این صورت با هر بار emit شدن سیگنال، اسلات مربوطه اجرا می شود؛ مشابه تابع،  که با هر بار فراخوانی، تابع مربوطه اجرا می شود. بنابراین رابطه سیگنال و اسلات در نرم افزار کیوت، یک رابطه علت و معلولی یک طرفه است. همان طور که علت باعث وقوع معلول می شود، emit شدن Signal، باعث اجرای Slot می گردد.

در آموزش شروع کار با GUI در نرم افزار Qt، اولین برنامه کیوت خود را با استفاده از فرم ها نوشتیم و یاد گرفتیم چه طور یک کلید pushbutton را در محیط form به یک اسلات متصل کنیم. برای برقرای اتصال بین signal و Slot راه دیگری هم وجود دارد و آن استفاده از کلمه کلیدی “connect” است. الگوی استفاده از دستور connect به صورت زیر می باشد:

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

, (نام سیگنال)SIGNAL, نام کلاسی که سیگنال از آن منتشر می شود ) Connect

                   ((نام اسلات)SLOT , نام کلاسی که اسلات مورد نظر در آن قرار دارد

در الگوی بالا هنگام ذکر نام سیگنال و نام اسلات، نیاز به ذکر نام متغیرها نیست و فقط باید نوع متغیرها را تعیین نمود.

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

درباره ی رویا عظیمی

کارشناس ارشد برق، گرایش الکترونیک دیجیتال

دیدگاهتان را بنویسید

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