我正在寻找一种可能的方法,只允许在Gtk :: Entry小部件中输入数字,而不依赖于SpinButtons。问题是,我找到了一个模板(link),但它不起作用。我可以沿着我的其他代码编译它,但是如果我想用
声明一个实例NumericEntry<int> int_entry(1,0,10);
它告诉我
在数字常量
之前预期','或'...'
第二部分是,我不清楚如何打包这个条目,因为我得到了一个
使用时出现无法转换为小部件
错误
functionname.pack_start(int_entry())
我想我的部分有一个愚蠢的错误(C ++和Gtkmm新手的糟糕组合),所以任何帮助都会受到赞赏。
答案 0 :(得分: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 :(得分:0)
这是一个没有子类化的解决方案。这是用 Rust 编写的,但在其他语言中应该也能正常工作。
fn is_non_ascii_digit(c: char) -> bool {
!c.is_ascii_digit()
}
fn entry_disallow(entry: >k::Entry, pattern: fn(char) -> bool) {
entry.connect_insert_text(move |entry, text, position| {
if text.contains(pattern) {
glib::signal::signal_stop_emission_by_name(entry, "insert-text");
entry.insert_text(&text.replace(pattern, ""), position);
}
});
}
// To use it
entry_disallow(&entry, is_non_ascii_digit);