【问题标题】:Make QLineEdit detect Tab Key Press event?让 QLineEdit 检测 Tab Key Press 事件?
【发布时间】:2014-08-13 13:15:57
【问题描述】:

我在文档中找不到任何内容。我找到了一个使用 PyQt 或其他东西的解决方案,但我宁愿不必使用它。另外,如果有信号就好了,但看起来好像没有。

【问题讨论】:

    标签: qt


    【解决方案1】:

    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);
    }
    

    【讨论】:

      【解决方案2】:

      您应该可以使用QObject::installEventFilter(QObject*) 来拦截按键事件。这里有一个例子:http://qt-project.org/doc/qt-4.8/qobject.html#installEventFilter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2012-11-08
        • 2016-12-23
        • 2021-03-10
        相关资源
        最近更新 更多