آدرس درس قبلی:
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آدرس درس بعدی:
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پاسخ گویی به رویداد ها توسط Slot ها و Signal ها
دکمه هم مانند برچسب، یک Widget است. اما تفاوتی که با Lable دارد این است که، برنامه شما نیاز دارد بفهمد چه موقعی بر روی دکمه کلیک می شود. در زیر برنامه ای را مورد بررسی قرار می دهیم که با فشار دادن دکمه اجرای آن متوقف می شود.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای این که دکمه در مقابل کلیک ماوس پاسخگو باشد، لازم است در ازای کلیک کاربر، پیغام ویژه ای برای یک متد خاص بفرستد. در برنامه فوق آن متد، تابع quit می باشد. این عملیات در خط 11انجام شده است. پیغامی که در ازای کلیک کاربر ارسال می شود را سیگنال می گوییم و متدی که سیگنال را دریافت می کند اسلات نامیده می شود.
در واقع در خط یازدهم برنامه، با استفاده از متد connect، که متعلق به شیئ QObject می باشد، سیگنال کلیک موشواره بر روی شیئ button را به اسلات quit که متعلق به شیئ app است متصل نموده ایم.
اتصال بین سیگنال ها و اسلات ها از طریق متد connect ایجاد می شود. این متد دارای دو پارامتر است که پارامتر اول سیگنال و پارامتر دوم اسلات مورد نظر است.
اگر قبل از این با سیستم های رویدادگرای دیگر کار کرده باشید حتماً با مفهوم callback function آشنایی دارید. Signal ها هم مانند callback function ها می باشند. با این تفاوت که signal ها type safe هستند.
در مثال بعدی مشاهده خواهید کرد که سیگنال ها و اسلات ها چگونه اشیای مختلف را با هم هماهنگ می کنند. در این برنامه کاربر می تواند سن خود را از طریق یک Spin Box یا یک Slider وارد کند. این دو Widget به صورت خودکار با هم هماهنگ هستند. این هماهنگی از طریق اسلات ها و سیگنال ها به وجود می آید. به این ترتیب که در هر شیئ سیگنالی وجود دارد که به اسلات شیئ دیگر متصل است و روند تغییرات را به گوش آن شیئ می رساند.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این برنامه شامل سه Widget می باشد. در خط هشتم hbox را به وجود آورده ایم. این شیئ Widget اصلی برنامه خواهد بود و با بستن آن برنامه به پایان خواهد رسید. همان طور که می بینید در خط 21 تابع setMainWidget را فراخوانی کرده ایم.
در خطوط 12 و 13 نیز به ترتیب spinBox و slider را بوجود آورده ایم. همانطور که ملاحظه می کنید هر دوی این اشیاء را به عنوان فرزندان hbox ایجاد کرده ایم. به این ترتیب این اشیاء درون hbox قرار می گیرند. شیئ hbox این ویژگی را دارد که باعث می شود تمام اشیاء درون آن بطور خودکار به ترتیب کنار یکدیگر قرار گیرند. بنابراین نیازی به تعیین دقیق موقعیت و اندازه اشیاء فرزند نیست. البته این کلاس در Qt3 وجود دارد و در نسخه چهارم باید از کلاس Q3HBox استفاده نمایید. در خط 11 متد setSpacing باعث می شود هر شیئی که درون hbox قرار می گیرد با فاصله 6 پیکسل نسبت به شیئ قبلی قرار بگیرد. متد setMargin هم یک حاشیه 6 پیکسلی برای شیئ hbox در نظر می گیرد.
متد setRange در خطوط 14 و 15 محدوده معتبر برای spibBox و slider را، اعداد بین 0 تا 150 قرار می دهد.
حال موقع آن است که اتصال بین دو شیئ را برقرار کنیم. این کار را طبق معمول با فراخوانی متد connect انجام می دهیم.
در خط 21 spinBox را مقدار دهی اولیه کرده ایم. به محض اجرای برنامه مقدار spinBox تغییر می کند و این باعث می شود سیگنال valueChanged فعال شود. بنابر این اسلات setValue مربوط به شیئ slider آن را دریافت می کند و مقدار slider نیز بروز رسانی می شود.
در خط 22 نیز متد show از شیئ hbox را فراخوانی کرده ایم. این متد باعث می شود شیئ hbox و تمام فرزندان آن بر روی صفحه نمایش داده شوند.
فایل زیر را برای نسخه چهارم Qt استفاده کنید. در این فایل تعدادی از توابع و کلاس هایی که تنها در Qt3 قابل استفاده بوده اند حذف شده اند:
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید