在 Gtk::Entry 小部件中强制输入数字
Force numeric input in a Gtk::Entry widget
我正在寻找一种可能的方法,只允许在Gtk::Entry小部件中输入数字,而不依赖于SpinButtons。问题是,我为此(链接)找到了一个模板,但它就是不起作用。我可以沿着我的其他代码编译它,但是如果我想声明一个实例
NumericEntry<int> int_entry(1,0,10);
它告诉我
预期的","或"..."数字常量之前
第二部分是,我不清楚如何打包此条目,因为我得到了一个
无法转换为小部件
使用时出错
functionname.pack_start(int_entry())
我想我的部分有一个愚蠢的错误(C++和 Gtkmm 新手的糟糕组合),所以任何帮助不胜感激。
只允许数字的一种方法是子类 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);
}
这是一个没有子类化的解决方案。这是用 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);
相关文章:
- 如果输入数字为负数,如何循环
- C++程序来查找输入数字的最小/最大值
- 如何接受可变的输入数字?
- cin.fail 在输入数字和字母时不起作用
- 如何在函数中输入数字以输出单词?
- 如果用户输入数字 <0,我如何停止" while loop "?
- C++:如果用户输入数字将其转换为单词,并且如果按回车键程序应退出,则使用开关大小写
- 如何使用正则表达式将输入数字格式化为字符串
- 当我运行我的程序时,即使"user"输入数字||C++ 绘画作业
- C 如何进行计数循环,该循环确定两个输入数字中的哪个是最低的,并且从那里计数
- 如何要求用户在类函数中输入数字
- 输入数字输入到if语句中
- 为什么 cin.fail() 在输入数字后跟字符时不返回 false?
- search用字符串列表输入数字(类似于t9字典)
- 试图创建一个函数来查找用户输入数字的斐波那契数
- 如何允许用户输入数字和运算符
- QTreeWidgetItem 可编辑仅允许输入数字
- 如何提示用户输入数字,直到他们选择奇数?C++
- 输入数字,直到输入 -1
- 编写一个程序,输入数字 1-12 并输出相应的月份