Search code examples
c++qtqlineedit

How to know if a QLineEdit got focus?


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?


Solution

  • 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.