How to know if a QLineEdit got focus?
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 !
Comments
-
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 ifQLineEdit 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
inLoginDialog
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 useQLabel
for that need?