2012-04-23 56 views
3

我正在尋找一種可能的方法,只允許在Gtk :: Entry小部件中輸入數字,而不依賴於SpinButtons。問題是,我找到了這個模板(link),但它不起作用。我可以編譯它沿着我的其他代碼,但如果我想與在Gtk :: Entry小部件中強制輸入數字

​​

聲明實例它告訴我

預期「」或之前的數字常量

「...」

第二部分是,我還沒有明確的想法如何打包此項,因爲我得到了

不能轉換爲小部件

錯誤使用

functionname.pack_start(int_entry()) 

我想有一個愚蠢的錯誤的我而言,(C++和gtkmm的新手糟糕的組合)的時候,所以任何幫助表示讚賞。

+2

哲學時刻:我從來不是限制這樣的投入的粉絲。如果我已經在剪貼板上添加了我想要的數字,並添加了一些額外的字母,然後複製/粘貼它,那麼我將刪除這些數字?文本輸入應該是文本輸入 - 在繼續之前檢查它,如果它不好 - 則不要標記它,但不要寫出削弱標準小部件行爲的脆弱掛鉤。你造成的問題比你解決的還要多。 – HostileFork 2012-04-23 12:20:32

+0

感謝這個想法,我會先看看我得到了什麼。我對數字輸入的推理是上下文:用戶應該爲酶提供動力學數據,並且這些數據總是純粹數字的,所以我認爲僅限制輸入會更容易。 – AcMNPV 2012-04-24 10:12:54

+0

當我們從思考如何限制輸入到思考如何處理輸入時,我們可以用軟件做更多的事情。舉個例子:http://ux.stackexchange.com/questions/2898/how-to-create-bands-of-number-ranges-for-a-field/ – HostileFork 2012-04-24 11:12:02

回答

2

一種只允許數字的方法是子類Gtk :: Entry並覆蓋on_insert_text()虛函數。在該虛函數中,您可以驗證輸入的文本,並在文本驗證時僅調用基類的on_insert_text()。

void NumberEntry::on_insert_text(const Glib::ustring& text, int* position) 
{ 
    // allow only numbers to be entered 
    if (contains_only_numbers(text)) 
     Gtk::Entry::on_insert_text(text, position); 
} 
+1

如果有人正在努力定義「contains_only_numbers」函數... bool NumberEntry :: contains_only_numbers(const Glib :: ustring&text) {int i = 0; i CodeMouse92 2015-06-17 21:41:55

+0

順便說一句,你的代碼作品@kalev! – CodeMouse92 2015-06-17 21:45:11