ユーザーがCtrl + Cをリリースしたときにカスタムコピーコードを呼びたいと思います。 CがCtrlより前にリリースされると、QtはQKeySequence::Copy
と一致するキーイベントを送信します。 CtrlがCより前にリリースされると、リリースイベントは一致しません。キーリリースイベントがCtrlキーとして来ると'C'の前にCtrlを放すと、QtでCtrl + Cキーイベントを捕まえる方法は?
、Cはまだ押されているかどうかを確認する方法はありますか?
Ctrlが最初にリリースされたときに、イベントが渡され、通常のコピーが実行されます。これはまったく起こりたくないものです。
bool
MyWidget::eventFilter(QObject* object, QEvent* event)
{
// the text edit box filters its events through here
if (object == m_text_edit_box)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *key_event = static_cast<QKeyEvent*>(event);
if (key_event->matches(QKeySequence::Copy))
{
// don't do anything and don't pass along event
return true;
}
}
else if (event->type() == QEvent::KeyRelease)
{
QKeyEvent *key_event = static_cast<QKeyEvent*>(event);
if (key_event->matches(QKeySequence::Copy))
{
// we only get in here if 'c' is released before ctrl
callCustomCopy();
return true;
}
}
}
// pass along event
return false;
}