我在文档中找不到任何内容。我找到了一个使用PyQt的解决方案,但我宁愿不必使用它。此外,如果有信号,那将是非常好的,但它看起来不像。
答案 0 :(得分:3)
1.当您按照Sam建议(m_lineEdit->installEventFilter(this);
)安装事件过滤器时,您需要处理QEvent::KeyPress
并检查密钥是否相等Qt::Key_Tab
:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_lineEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Tab)
{
//do what you need;
return true;
}
}
// pass the event on to the parent class
return QMainWindow::eventFilter(obj, event);
}
2.另一种方法是创建一个从QLineEdit继承并重新实现keyPressEvent
的新类:
void LineEdit::keyPressEvent(QKeyEvent* event)
{
if (keyEvent->key() == Qt::Key_Tab)
{
emit tabPressed();
return;
}
QLineEdit::keyPressEvent(event);
}
答案 1 :(得分:1)
您应该可以使用QObject::installEventFilter(QObject*)
拦截按键事件。这里有一个例子:http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter。