ハードウェアをシミュレートする Qt プログラムを作成しています。ボタンのプレス、ホールド、およびリリース イベントをシミュレートしたいと考えています。私のアプリケーションでは、キーボードとマウスの両方のクリックからの入力を処理して、ユーザー (つまり私) にとって便利なものにしたいと考えています。奇妙な動作に気付きましたが、理解できません。
アプリケーションは QPushButton をautoRepeat
有効にして 100 ミリ秒で使用しautoRepeatDelay
、autoRepeatInterval
. ボタンをマウスでクリックすると、「押された」イベントと「離された」イベントが交互に表示されます。1 ~ N-1 の「押された」イベントの後に「解放された」イベントが続くと予想していました。なぜQtはそのように振る舞うのですか?
また、キーボードからのボタンの押下を処理する次のコードも実装しました。
void MyApp::keyPressEvent(QKeyEvent *event)
{
QString s = QString("My PRESS key is %1. The counter is %2").arg(event->text(), QString::number(keyCounter));
qDebug() << s;
keyCounter++;
}
void MyApp::keyReleaseEvent(QKeyEvent *event)
{
QString s = QString("My RELEASE key is %1. The counter is %2").arg(event->text(), QString::number(keyCounter));
qDebug() << s;
keyCounter = 0;
}
bool MyApp::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
this->keyPressEvent(dynamic_cast<QKeyEvent*>(event));
return true;
}
else if (event->type() == QEvent::KeyRelease)
{
this->keyReleaseEvent(dynamic_cast<QKeyEvent*>(event));
return true;
}
else
{
return QObject::eventFilter(obj, event);
}
}
ここでは、2 種類の動作が見られます。英数字キーの場合、「押された」イベントと「離された」イベントが交互に表示されます。矢印キーについては、「リリースされた」イベントのみが表示されます。繰り返しますが、1 ~ N-1 の「押された」イベントの後に「解放された」イベントが続くと予想していました。矢印キーの動作が英数字キーと異なるのはなぜですか?
私がやろうとしていることはQtで可能ですか?