2016-06-28 3 views
0

Qt4 프로젝트를 진행하고 있습니다. QLineEdit 있고 QLineEdit 내에서 Esc 키를 클릭하면 나타나는 동작을 다시 사용하려는 있지만 방법을 잘 모르겠습니다.Esc 키를 눌러 QLineEdit 텍스트를 재설정하는 방법은 무엇입니까?

이스케이프 키를 누르면 필자가 편집을 시작하기 전의 값으로 재설정 할 필드가 생깁니다. 이것은 나에게 유용하며이 행동을 직접적으로 원합니다.

이상적으로, QLineEdit가 이전 값으로 재설정되도록 트리거 할 수있는 신호를 보내고 싶습니다. 탈출 키 이벤트를 가짜로 시도하지 않는 것이 좋습니다. 내가 줄 편집의 이전 값을 캐시 할 수 있지만이 동작을 이미 이스케이프 클릭하면 존재하는 경우 더 많은 작업을 보인다. 감사.

답변

0

어떻게 QLineEdit 위젯 프로그래밍 방식으로 텍스트를 설정하여 Esc 키에 응답 할 수 있습니까? 이벤트 필터 설치처럼 QLineEdit의 자녀 또는 좀 더 "로컬"로 QWidget::event 가상 함수를 오버라이드

어느 :

class MyLineEditEventFilter : public QObject 
    { 
    public: 
     explicit MyLineEditEventFilter(QLineEdit *parent) : QObject(parent) 
     {} 

     bool eventFilter(QObject *obj, QEvent *e) 
     { 
      switch (e->type()) 
      { 
       case QEvent::KeyPress: 
       { 
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e); 
        if (keyEvent->key() == Qt::Key_Escape) 
        { 
         // or set the other text from the variable 
         reinterpret_cast<QLineEdit *>(parent())->setText("Escape!"); 
        } 
        break; 
       } 
      } 
      // standard event processing 
      return QObject::eventFilter(obj, e); 
     } 
    }; 

호출자는 같다 :

m_pLineEditSearch = new QLineEdit; 
auto* pLineEditEvtFilter = new MyLineEditEventFilter(m_pLineEditSearch); 
m_pLineEditSearch->installEventFilter(pLineEditEvtFilter); 

Escape 키를 눌러 이전 텍스트를 다시 가져 오려면 다른 방법을 사용할 수 있지만 어떻게 든 문자열을 유지하는 객체에 대한 포인터를 가져와야합니다. 코드를 보지 않고도 대답하기가 어렵습니다.

+0

이것은 분명합니다. QLineEdit을 서브 클래 싱하여 이벤트 동작을 재정의하는 것이 좋습니다. 나는 그것이 이미 존재하기 때문에 그 행동을 재현하는이 물체에 대한 신호 또는 방법을 얻을 수 있기를 바랬다. 감사! –