QT (Custom) LineEdit Focused Event

Eden·2022년 12월 15일
0

LineEdit 클릭시 해당 LineEdit를 확인하여 원하는 로직을 실행하는 마우스 클릭이벤트를 만들고 installEventFilter를 이용하여 적당히 사용중 Vxworks에서 빌드시 installEventFilter가 적용된 LineEdit이 화면에 나타나지 않는 현상이 발견돼 새로운 방법을 찾아야했다.

특정 LineEdit 컨트롤이 선택됐을때 (SetFocus) 이벤트를 받고싶지만 해당 상황에 맞는 signal이 없다 따라서 Custom LineEdit Class를 만들어 FocusinEvent에 시그널을 주어 원하는 이벤트를 만들어보려함

정리

1. LineEdit가 Focus 됐을때 특정 작업을 처리하고싶음

2. LineEdit의 signal중에 해당 상황에 맞는 signal이 존재 하지 않음

3. LineEdit의 FocusInEvent 라는 virtual void 가 존재

4. QLineEdit를 상속받는 CustomLineEdit를 만들어 새로운 Signal을 정의

5. FocusInEvent를 재정의하고 이때 새로만든 Signal을 Emit

6. Connect으로 Signal과 Slot을 사용하여 Focus시 원하는 이벤트가 발생하도록 함

7. 주의 CustomLineEdit는 .ui 파일에서 QLineEdit Class가 아닌 새로만든 Class로 수정해주어야함 (Promote to... 이용)


Custom LineEdit

<.h file>

#include <QLineEdit>

class QLineEdit_Signal : public QLineEdit
{
    Q_OBJECT

public:
    explicit QLineEdit_Signal(QWidget *pParent = 0);


protected:
    virtual void focusInEvent(QFocusEvent *fe);
    virtual void focusOutEvent(QFocusEvent *fe);
signals:
    void SelectedFocus(); // 
    void CanceledFocus();
public slots:
};

<.cpp file>

#include "qlineedit_signal.h"

QLineEdit_Signal::QLineEdit_Signal(QWidget *pParent)
    : QLineEdit(pParent)
{

}


void QLineEdit_Signal::focusInEvent(QFocusEvent *fe)
{
    emit SelectedFocus();

    QLineEdit::focusInEvent(fe);
}

void QLineEdit_Signal::focusOutEvent(QFocusEvent *fe)
{
    emit CanceledFocus();


    QLineEdit::focusOutEvent(fe);
}

Use

1. lineedit를 만들고 Promote to 를 이용해 클래스를 custom class로 바꿔준다

2. 사용을 원하는 곳에 Slot을 정의한다

header에 slot 추가

public slots:
    void      ChangedFocus();
    void      OutFocus();

source에 함수 정의

void ~~::ChangedFocus()
{
   	//event
}
void ~~::OutFocus()
{
    //event
}

Connect를 통한 연결

connect(customlineedit,SIGNAL(SelectedFocus()),this, SLOT(ChangedFocus()));
connect(customlineedit,SIGNAL(CanceledFocus()),this, SLOT(OutFocus()));
profile
주섬주섬..

0개의 댓글