PDA

View Full Version : سوال: Qkeyevent و مشكل لحاظ نكردن keyrelease



ravaei
یک شنبه 09 فروردین 1394, 21:32 عصر
درود...


من کد زیر رو برای دسترسی به key press و key release چند تا از دکمه های کیبورد نوشتم و از کلاس Qkeyevent برای این کار تو تابع استفاده کردم
ولی نمیدونم چرا فقط تابع key() از کلاس Qkeyevent قابل استفاده هست و تو دستور switch دوم هر چی مینویسم کار نمی کنه ...


اگه زحمت نیست یه توضیحی هم راجع به Qevent بدید که آیا میشه از این به جای Qkeyevent استفاده کرد ....؟











void lid::keyPressEvent(QKeyEvent *e)
{
switch (e->key())
{
case Qt::Key_Tab: this->on_do_2_pressed(); break;
case Qt::Key_1: this->on_do_diyez_pressed(); break;
case Qt::Key_Q: this->on_re_pressed(); break;
case Qt::Key_2: this->on_re_diyez_pressed(); break;
case Qt::Key_W: this->on_mi_pressed(); break;
case Qt::Key_E: this->on_fa_pressed(); break;
case Qt::Key_4: this->on_fa_diyez_pressed(); break;
case Qt::Key_R: this->on_sol_pressed(); break;
case Qt::Key_5: this->on_sol_diyez_pressed(); break;
case Qt::Key_T: this->on_la_pressed(); break;
case Qt::Key_6: this->on_la_diyez_pressed(); break;
case Qt::Key_Y: this->on_si_pressed(); break;
default:
break;
}




switch (e->KeyRelease)
{
case Qt::Key_1: ui->do_diyez->setStyleSheet("background-color: rgb(255, 225, 225);");
break;
default:
break;
}
}


با تشکر...

حامد مصافی
دوشنبه 10 فروردین 1394, 09:50 صبح
وقتی یک شی از کلاس QKeyEvent به عنوان پارامتر تابع keyPressEvent ارسال میشه به معنی اینه که این شی فقط در زمان فشردن دکمه ایجاد میشه. پس عملا هرگز مقدار KeyRelease نخواهد داشت. حدس میزنم شما نیاز دارید نگاهی به تابع keyReleaseEvent بیندازید. به بیان دیگر keyPressEvent زمانی فراخوانی می‌شود که کلید فشرده باشد و keyReleaseEvent مربوط به زمانی است که کلید رها شده باشد.

ravaei
دوشنبه 10 فروردین 1394, 10:05 صبح
وقتی یک شی از کلاس QKeyEvent به عنوان پارامتر تابع keyPressEvent ارسال میشه به معنی اینه که این شی فقط در زمان فشردن دکمه ایجاد میشه. پس عملا هرگز مقدار KeyRelease نخواهد داشت. حدس میزنم شما نیاز دارید نگاهی به تابع keyReleaseEvent بیندازید. به بیان دیگر keyPressEvent زمانی فراخوانی می‌شود که کلید فشرده باشد و keyReleaseEvent مربوط به زمانی است که کلید رها شده باشد.

ممنون ، به این شکل انجام دادم درست شد ...



void lid::keyReleaseEvent(QKeyEvent *e)
{
switch (e->key())
{
case Qt::Key_1: ui->do_diyez->setStyleSheet("background-color: rgb(255, 225, 225);");
break;
default:
break;
}
}