2012-04-23 53 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