2010-05-10 10 views

risposta

21

non c'è segnale emesso quando QLineEdit ottiene l'attenzione. Quindi la nozione di connettere un metodo all'evento focus non è direttamente appropriata.

Se si desidera avere un segnale focused, sarà necessario derivare la classe QLineEdit. Ecco un esempio di come questo può essere raggiunto.

Nel file myLineEdit.h si ha:

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); 
} 

Nel file myLineEdit.cpp si hanno:

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)); 
} 

È ora possibile collegare il segnale MyLineEdit::focussed() al focus() metodo (slot).