¿Cómo saber si un Qlineedit se enfocó?
Pregunta
Quiero poder saber si en el QLineEdit
Fue un clic. Así que supongo que debería volver a implementar la siguiente función (??):
void QLineEdit::focusInEvent ( QFocusEvent * e ) [virtual protected]
¿Cómo debo hacer eso?
Además, por favor dime cómo usar focusInEvent()
función para saber si QLineEdit myEdit;
El objeto tiene foco.
EDITAR: He escrito la siguiente función:
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);
}
Y se han registrado m_passwordLineEdit
en LoginDialog
Constructor de clase como este:
m_passwordLineEdit->installEventFilter(this);
Y está cayendo en un bucle infinito de MessageBox-es. Por favor, ayúdame a resolver esta situación. En realidad me gustaría implementar esta función con una ventana emergente (no con un QMessageBox
). ¿Está bien usar QLabel
para esa necesidad?
Solución
Algo como eso:
class YourWidget : public QLineEdit
{
Q_OBJECT
protected:
void focusInEvent(QFocusEvent* e);
};
En el .cpp
expediente:
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);
}
Puede encontrar la lista de todas las razones posibles en esta página.
Otros consejos
Además, dígame cómo usar la función FocusEnvent () para saber si QlineEdit MyEdit; El objeto tiene foco.
Debe conectarse a la siguiente señal:
void QApplication::focusChanged ( QWidget * old, QWidget * now ) [signal]
Cuando el nuevo QWidget es su QlineEdit, ¡sabe que se enfoca!
Espero eso ayude !
Si desea saber cuándo alguien hace clic en un widget, debe anular mousePressEvent (QMouseEvent* event)
. A focusInEvent
puede ser activado por otras fuentes que un clic del mouse.
Por ejemplo:
class MyLineEdit : public QLineEdit
{
Q_OBJECT
public:
//...
protected:
void mousePressEvent(QMouseEvent* event)
{
//pass the event to QLineEdit
QLineEdit::mousePressEvent(event);
//register the click or act on it
}
};
Si desea saber cuándo su widget recibe enfoque, haga lo mismo con un focusInEvent
por supuesto.