2012-04-23 2 views
3

Я ищу возможный метод, позволяющий только вводить числовой ввод в виджет Gtk :: Entry, не полагаясь на SpinButtons. Дело в том, что я нашел шаблон для этого (link), но он просто не сработает. Я могу скомпилировать его вдоль моего другого кода, но если я хочу, чтобы объявить экземпляр сВвод числового ввода в виджет Gtk :: Entry

NumericEntry<int> int_entry(1,0,10); 

он говорит мне

ожидается «» или «...» перед числовой константой

Вторая часть, что у меня нет четкого представления, как упаковать эту запись, потому что я получаю

не может преобразовать виджет

ошибка при использовании

functionname.pack_start(int_entry()) 

Я предполагаю, что это глупая ошибка моя часть (плохая комбинация C++ и Gtkmm новичка), поэтому любая помощь приветствуется.

+2

Философский момент: Я никогда не являюсь поклонником ограничения входных данных, подобных этому. Что делать, если у меня есть номер, который я хочу уже в буфере обмена, с несколькими дополнительными буквами и скопировать/вставить его ... тогда я удалю номера? Текстовые входы должны быть текстовыми вводом - проверьте его, прежде чем продолжить, и отметьте его, если это нехорошо, но не пишите хрупкие крючки, которые наносят ущерб стандартным виджетам. Вы вызываете больше проблем, чем решаете. – HostileFork

+0

Спасибо за эту идею, я сначала увижу, что я использую. Мое рассуждение о числовом вводе - это контекст: пользователь должен давать кинетические данные для фермента, и это всегда чисто числовое, поэтому я подумал, что было бы проще просто ограничить ввод. – AcMNPV

+0

Есть гораздо больше, что мы можем сделать с программным обеспечением, когда мы переходим от мысли о том, как * ограничить * ввод, чтобы думать о том, как * обрабатывать * ввод. Например: http://ux.stackexchange.com/questions/2898/how-to-create-bands-of-number-ranges-for-a-field/ – HostileFork

ответ

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

+0

Кстати, ваш код работает с удовольствием @kalev! – CodeMouse92

Смежные вопросы