LineEdit 클릭시 해당 LineEdit를 확인하여 원하는 로직을 실행하는 마우스 클릭이벤트를 만들고 installEventFilter를 이용하여 적당히 사용중 Vxworks에서 빌드시 installEventFilter가 적용된 LineEdit이 화면에 나타나지 않는 현상이 발견돼 새로운 방법을 찾아야했다.
특정 LineEdit 컨트롤이 선택됐을때 (SetFocus) 이벤트를 받고싶지만 해당 상황에 맞는 signal이 없다 따라서 Custom LineEdit Class를 만들어 FocusinEvent에 시그널을 주어 원하는 이벤트를 만들어보려함
Custom LineEdit
#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:
};
#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
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()));