让QLineEdit检测Tab键按事件?

时间:2014-08-12 23:57:16

标签: qt

我在文档中找不到任何内容。我找到了一个使用PyQt的解决方案,但我宁愿不必使用它。此外,如果有信号,那将是非常好的,但它看起来不像。

2 个答案:

答案 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