PDA

View Full Version : سوال: آیا برای استفاده کردن از توابع عضو حتما باید از signal و Slot استفاده کرد؟



complexcoding
دوشنبه 10 مهر 1391, 17:04 عصر
با سلام
آیا برای استفاده کردن از توابع عضو حتما باید از signal و Slot استفاده کرد؟ مثلا کد زیر را باید چگونه به کار گرفت:
voidQGroupBox::mouseMoveEvent(QMouseEvent*event )


خیلی ممنون از کمکتون

rubiks.kde
دوشنبه 10 مهر 1391, 20:37 عصر
نه این کار همیشه لازم نیست شما می تونید هر تابع رو هرجا از کلاس که خواستید فراخوانی کنید تنها زمانی از سیگنال و سلات استفاده میشه که میخواهیم یک کار با اتفاق افتادن یه کار دیگه انجام بشه برای مثال با هر ثانیه یه عملیات صورت بگیره.
در مورد این تابعی هم که نوشتی یه event می باشد که خودش اتفاق می افته و لازم نیست شما در جایی از اون استفاده کنید eventها معمولا از نوع virtual هستند که برنامه نویس میتونه دوباره براساس نیاز خودش اون رو دوباره پیاده سازی کنه

complexcoding
دوشنبه 10 مهر 1391, 20:51 عصر
دست شما درد نکنه یه نمونه کد نداری طرز استفادهش رو ببینم؟

ali chegini
دوشنبه 10 مهر 1391, 22:24 عصر
void analogclock::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() & Qt::LeftButton) {
//every thing
event->accept();
}
}

complexcoding
دوشنبه 10 مهر 1391, 23:25 عصر
void analogclock::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() & Qt::LeftButton) {
//every thing
event->accept();
}
}

نمونه کد خیلی خوب و جامعی بود ممنون
اما توضیح یکی از دوستان در این باره بدبن گونه هست که باید ارث بری انجام بشه ... یک مثال با این توضیحات اگر حتی آدرسش در گوگل هم باشه راضیم حتما نباید به زحمت بیفتید... بازم ممنون
توضیح دوستمون :
"برای بکار گیری توابع کنترل رویداد مثل همین نمونه ایی که گذاشتید باید کلاسی رو از کلاس اون شی به ارث ببرید و بعد اون تابع رو بازنویسی کنید.
توابع کنترل رویداد در سطح پایین در Qt بصورت virtual تعریف شدند و قابل بازنویسی هستند البته بازنویسی این توابع قوانین و شرایط خاصی دارد وگرنه اون شی امکان پاسخ به اون رویداد رو از دست میده.
مثلا برای کنترل رویداد حرکت موس در یک widget باید ایتدا کلاسی رو از QWidget به ارث ببرید تا بتونید به توابع کنترل رویداد که در بخش protected در کلاس widget قرار دارند دسترسی پیدا کنید بعد اقدام به بازنویسی اون کنید و رویداد رو هر طور که دوست دارید کنترل کنید ولی در نهایت باید رویداد روبه شی پاس بدید تا شی بتونه به اون پاسخ بده. "