2012-04-23 34 views
3

SpinButtonsに頼ることなく、Gtk :: Entryウィジェットで数値入力のみを可能にする方法を探しています。問題は、テンプレート(link)が見つかりましたが、機能しません。私は私の他のコードに沿って、それをコンパイルすることができますが、私はGtk :: Entryウィジェットで数値入力を強制する

​​

でインスタンスを宣言したい場合は、それは私に語った

予想「」または「...」数値定数

第二部では、私が

がに変換することはできません取得するので、私は、どのようにこのエントリをパックに明確な考えを持っていないということであり、ウィジェット

エラー私は愚かなエラー私の一部(C++とgtkmmの初心者の悪い組み合わせ)があると思います

functionname.pack_start(int_entry()) 

を使用して、そのすべてのヘルプは大歓迎です。

+2

哲学:私は決してこのような入力を制限するファンではありません。クリップボードにもう一桁の余分な手紙を入れてコピー&ペーストしたい番号があれば、その番号を削除しますか?テキストの入力はテキスト入力でなければなりません。続行する前に確認し、うまくいかない場合はフラグを立てますが、標準的なウィジェットの動作を損なう脆弱なフックは書きません。あなたは解決するよりも多くの問題を引き起こします。 – HostileFork

+0

このアイデアをお寄せいただきありがとうございます。数値入力の私の推論はコンテキストです:ユーザーは酵素の動態データを与える必要があり、それは常に純粋な数値ですので、入力を制限するほうが簡単だと思いました。 – AcMNPV

+0

入力を処理する方法の考え方から入力を処理する方法まで考えるときに、ソフトウェアでできることはもっとたくさんあります。例:http://ux.stackexchange.com/questions/2898/how-to-create-bands-of-number-ranges-for-a-field/ – HostileFork

答えて

2

数字のみを許可する方法の1つは、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) { for(int i = 0; i CodeMouse92

+0

ところで、あなたのコードは@kalevの扱いになります! – CodeMouse92

関連する問題