2017-04-24 75 views
0

我正在做Gtkmm GUI編程,我對這種編程語言很陌生。 如何讓用戶只在Gtkmm條目文本框中輸入數值。Gtkmm文本輸入過濾器

+0

你必須自己處理關鍵事件。 –

回答

0

你需要添加一個鍵釋放信號的輸入,例如這是我的條目「m_EntryAmount」

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

,並添加了信號功能

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

這應該可行,但我希望用戶體驗相當......不愉快。想象一下,輸入一長串數字,可能是通過從一張紙上讀取它們(對於財務數據並不罕見),然後錯誤地鍵入一個鍵(滑向「p」而不是「0」或其他)並愉快地應用程序清除整個條目。不太好!另一種方法是過濾*按*,然後阻止未接受的字符。 – unwind

+0

我知道這不是一個真正的解決方案,但它只是爲了幫助 – manneta

+0

解決您需要處理入口鍵(GdkEventKey)而不是入口本身。或存儲舊的價值,並回到它,如果有任何新的字符......有很多方法來解決這個問題。 – manneta