如何检测在QT中按Alt + Enter
问题描述:
我有QTextEdit,我想要检测“Alt + Enter”键被按下(两个键在一起)。 我已经安装了事件过滤器来检测按键事件,当输入时按我可以检测到的关键,但我如何检测到“Alt”键也被按下?如何检测在QT中按Alt + Enter
我试着记住“Alt”键按下&版本(带有静态变量),但如果用户在应用程序外部释放Alt键,则这没有帮助。
请参阅附上我的代码。
bool MTGridEditDelegate::eventFilter(QObject *obj,QEvent *event){
static bool pressed = false;
if(event->type() == QEvent::KeyPress)
{
if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt)
{
pressed = true;
qDebug("Alt Pressed");
}
}
if(event->type() == QEvent::KeyRelease)
{
if(static_cast<QKeyEvent*>(event)->key() == Qt::Key_Alt)
{
pressed = false;
qDebug("Alt Released");
}
}
if(event->type() == QEvent::KeyPress)
{
int key = static_cast<QKeyEvent *>(event)->key();
qDebug("The Key is : %d",key);
switch (static_cast<QKeyEvent *>(event)->key())
{
case Qt::Key_Backtab:
break;
case Qt::Key_Tab:
case Qt::Key_Enter:
case Qt::Key_Return:
{
QWidget *editor = ::qobject_cast<QWidget*>(obj);
if(!pressed)
{
emit commitData(editor);
emit closeEditor(editor, NoHint);
}
else
{
MQTextEdit *editBox = qobject_cast<MQTextEdit *>(editor);
if (editBox)
{
QString text = editBox->toPlainText();
text = text + QChar('\n');
//text = text + QChar('\r');
editBox->setPlainText(text);
}
}
break;
}
case Qt::Key_Escape:
// CustControlFocusLost();
break;
default:
return false;
}
return true;
}
else
{
return QObject::eventFilter(obj,event);
}
}
答
你为什么不使用keyPressEvent?
你需要这样的东西。使用修饰符()事件的方法。
void myClass::keyPressEvent(QKeyEvent *e)
{
if ((e->key()==Qt::Key_Return) && (e->modifiers()==Qt::AltModifier))
doSomething();
}
感谢您的帮助,这就是我一直在寻找 – maxchirag 2011-06-09 12:34:07
我已经thried这一个BT IM没有得到任何输出...这是我的代码.. 无效的MainWindow :: keyPressEvent(QKeyEvent *事件) ((event-> key()== Qt :: Key_U)){ qDebug() accept(); } – 2016-07-10 09:15:42
此外,如果您需要检测AltGr,还可以使用'(e-> modifiers()==(Qt :: ControlModifier | Qt :: AltModifier))''。请注意,ALT + CTRL也会被检测到。 – Safoyeth 2017-02-15 11:58:08