How to know if a QLineEdit got focus?

18,786

Solution 1

Something like that:

class YourWidget : public QLineEdit
{
    Q_OBJECT

    protected:

    void focusInEvent(QFocusEvent* e);
};

In the .cpp file:

void YourWidget::focusInEvent(QFocusEvent* e)
{
    if (e->reason() == Qt::MouseFocusReason)
    {
      // The mouse trigerred the event
    }

    // You might also call the parent method.
    QLineEdit::focusInEvent(e);
}

You can find the list of all possible reasons on this page.

Solution 2

Also, please tell me how to use focusInEvent() function in order to know if QLineEdit myEdit; object got focus.

You should connect yourself to the following SIGNAL :

void QApplication::focusChanged ( QWidget * old, QWidget * now )   [signal]

When the new QWidget is your QLineEdit, you know it got focus !

Hope it helps !

Share:
18,786
Narek
Author by

Narek

Game developer.

Updated on July 05, 2022

Comments

  • Narek
    Narek almost 2 years

    I want to be able to know if in the QLineEdit it was a click. So I guess I should reimplement the following function(??):

    void QLineEdit::focusInEvent ( QFocusEvent * e )   [virtual protected]
    

    How should I do that?

    Also, please tell me how to use focusInEvent() function in order to know if QLineEdit myEdit; object got focus.

    EDIT: I have written the following function:

    bool LoginDialog::eventFilter(QObject *target, QEvent *event)
    {
        if (target == m_passwordLineEdit)
        {
            if (event->type() == QEvent::FocusIn)
            {
                if(checkCapsLock())
                {
                    QMessageBox::about(this,"Caps Lock", "Your caps lock is ON!");
    
                }
                return true;
    
            }
        }
        return QDialog::eventFilter(target, event);
    }
    

    And have registered m_passwordLineEdit in LoginDialog class constructor like this:

    m_passwordLineEdit->installEventFilter(this);
    

    And it's falling into an infinite loop of MessageBox-es. Please help me to resolve this situation. Actually I would like to implemet this function with a pop-up window (not with a QMessageBox). Is it OK to use QLabel for that need?