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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top