2010-05-10 4 views

ответ

21

Там нет сигнала когда QLineEdit получает фокус. Таким образом, понятие подключения метода к событию фокуса напрямую не подходит.

Если вы хотите получить сигнал focused, вам нужно будет получить класс QLineEdit. Вот пример того, как это можно достичь.

В файле myLineEdit.h у вас есть:

class MyLineEdit : public QLineEdit 
{ 
    Q_OBJECT 

public: 
    MyLineEdit(QWidget *parent = 0); 
    ~MyLineEdit(); 

signals: 
    void focussed(bool hasFocus); 

protected: 
    virtual void focusInEvent(QFocusEvent *e); 
    virtual void focusOutEvent(QFocusEvent *e); 
} 

В файле myLineEdit.cpp у вас есть:

MyLineEdit::MyLineEdit(QWidget *parent) 
: QLineEdit(parent) 
{} 

MyLineEdit::~MyLineEdit() 
{} 

void MyLineEdit::focusInEvent(QFocusEvent *e) 
{ 
    QLineEdit::focusInEvent(e); 
    emit(focussed(true)); 
} 

void MyLineEdit::focusOutEvent(QFocusEvent *e) 
{ 
    QLineEdit::focusOutEvent(e); 
    emit(focussed(false)); 
} 

Теперь вы можете подключить MyLineEdit::focussed() сигнал к focus() метода (слот).

1

Я предполагаю, что вы имеете в виду подключения, как в сигналах/слотах, фокус событие не является сигналом это виртуальный метод, который вы должны переопределить для того, чтобы изменить поведение:

http://doc.qt.io/qt-5/qlineedit.html#focusInEvent