某些情况下,keyPressEvent无法匹配快捷键的解决办法

if (event->type() == QEvent::KeyPress)
{
	QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
	if (keyEvent->matches(QKeySequence::Save))
	{
		// Do save
	}
}

上面这段代码有时无法按预期执行。解决办法也很简单,像下面这样写即可:

if (event->type() == QEvent::KeyPress || event->type() == QEvent::ShortcutOverride)
{
	QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
	if (keyEvent->matches(QKeySequence::Save))
	{
		// Do save
	}
}

很简单,就是多匹配一个条件:

|| event->type() == QEvent::ShortcutOverride

 
来自:QWidget::eventFilter() not catching key combinations

发表回复