【问题标题】:Signals returnPressed() and editingFinished() does not work for QLineEdit信号 returnPressed() 和 editingFinished() 不适用于 QLineEdit
【发布时间】:2014-09-25 14:27:31
【问题描述】:

我正在使用QLineEditeditingFinished() 信号来执行操作。文档说,当按下返回或输入键或失去焦点时,将发出此信号。

它适用于数字锁上的enter keyWindows 键盘),以及当它失去焦点时,但当我按下键盘上的“返回键”时,不会发出信号。我尝试使用returnPressed() 信号,它的行为方式相同。

我错过了什么吗?

谢谢

【问题讨论】:

    标签: c++ qt qlineedit


    【解决方案1】:

    子类QLineEdit

    重新实现keyPressEvent()

    抓住Qt::Key_Enter按下并做你的工作或自己发出信号

    来自文档:

    Qt::Key_Return  0x01000004   
    Qt::Key_Enter   0x01000005  Typically located on the keypad.
    

    类似这样的:

    void LineEdit::keyPressEvent(QKeyEvent *event)
    {
        if(event->key() == Qt::Key_Enter)
        {
            //do something
        }
    }
    

    如果你不想要子类,你可以installEventFilter到你的对话窗口,抓住你的lineEdit并检查Qt::Key_Enter是否被按下。

    bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    {
            if (obj == ui->lineEdit && event->type() == QEvent::KeyPress)
            {
                QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
                if(Qt::Key_Enter == keyEvent->key() )
                {
                    qDebug() << "numpad Enter pressed";
                }
            }
    }
    

    别忘了

    protected:
    bool eventFilter(QObject *obj, QEvent *event);//in header
    

    qApp->installEventFilter(this);//in constructor
    

    例如:

    void MainWindow::on_lineEdit_returnPressed()
    {
        qDebug() << "numpad Enter pressed";
    }
    

    【讨论】:

    • 感谢您的解决方案。但我只是想知道,虽然文档说,这个信号会为 return 和 enter 键发出,那么为什么它只适用于 enter 键。
    • @user1703942 在我的电脑上它工作正常,捕获两者,所以显示你的代码或使用我的解决方案
    • 实际上没有代码可以显示。因为我使用的是 Qt creator,我右键单击 QLineEdit,选择“转到插槽”,然后选择信号。并且插槽是自动创建的。但我想如果我不明白为什么会这样,那么我别无选择,只能使用你的解决方案。
    • 我尝试使用事件过滤器。问题是一样的,它适用于输入键但不适用于返回键
    • @user1703942 有点奇怪,您确定您的 NumLock 已启用并正常工作(抱歉这个愚蠢的问题)。如果您的 numLock 工作正常并启用,然后尝试在 clear 项目中捕获 EnterKey,可能有什么东西在您当前的项目中阻止了这个键。
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多