2017-04-24 15 views
0

지금 Gtkmm GUI 프로그래밍을하고 있으며이 프로그래밍 언어를 처음 사용합니다. 사용자가 Gtkmm Entry 텍스트 상자에 숫자 값을 입력하는 방법.Gtkmm 텍스트 입력 필터

+0

자신이 직접 키 이벤트를 처리해야합니다. –

답변

0

당신은 예를 들어 사용자의 입력을위한 키 해제 신호를 추가해야이

m_EntryAmount.signal_key_release_event().connect(sigc::mem_fun(*this, &Vente::entryKeyReleaseAmount)); 

내 항목 "m_EntryAmount"하고 신호 기능을

bool Sales::entryKeyReleaseAmount(GdkEventKey* /* event */) 
{ 
    if(m_EntryAmount.get_text()!="" && is_number(m_EntryAmount.get_text())){ 
     //now the Entry is not empty and its a number 
     //do what you want here 

    }else{ 

     //here the Entry is not a number you can just delete it 
     m_EntryAmount.set_text(""); 
} 
    return true; 
} 

을 추가하고 is_number 기능을 추가

bool Vente::is_number(const string& s) 
{ 
    return !s.empty() && std::find_if(s.begin(), 
     s.end(), [](char c) { return !std::isdigit(c); }) == s.end(); 
} 

이것은 간단한 아이디어에 불과합니다. 자신이 직접 할 수 있습니다. 길을 사용하여

+0

이 작업은 효과가 있지만 사용자 만족도가 다소 좋지 않을 것으로 예상됩니다. 아마도 종이에서 (금융 데이터에 흔하지 않은) 읽은 다음 키를 잘못 입력하고 ('0'또는 '0'대신 'p'로 빠져 나와) 응용 프로그램을 기쁜 마음으로 사용하여 긴 숫자 시퀀스를 입력한다고 가정 해보십시오. 전체 항목을 지 웁니다. 좋지 않아! 물론 * presses *를 필터링하고 허용되지 않는 문자를 차단하는 것도 물론 가능합니다. – unwind

+0

나는 진정한 해결책이 아니라는 것을 알고 있지만, – manneta

+0

이 엔트리 자체가 아닌 엔트리 키 (GdkEventKey)에 대해 작업해야한다는 것을 수정하는 데 도움이된다. 또는 새로운 가치가있는 경우 이전 값을 재고로 되돌려 놓아야합니다.이를 해결할 수있는 방법이 많이 있습니다. – manneta