1

私は gtkmm 3 (Ubuntu 12.04 LTS を実行) を使用してアプリケーションを作成しており、現在 Gtk::Entry コントロールを使用しています。

キャプチャする正しいシグナルが見つからないため、Gtk::Entry バッファー テキストを変更前に取得し、それを保持して変更の記録を維持できます。他のいくつかのツールキットでは、そのようなことを容易にするフックが提供されていることを知っています。(「シャドウバッファ」を使用していると思います。)

これを行うには、どの信号を取得する必要がありますか? この信号のスロットのシグネチャは何ですか? この機能はサポートされていますか?

4

2 に答える 2

4

動作を変更しているため、次から継承することをお勧めしますGtk::Entry

class ValidatedEntry : public Gtk::Entry {

    Glib::ustring last_valid;

    virtual void on_changed()
    {
        Glib::ustring text = get_text();
        if (... validation here ...)
            set_text(last_valid); // WARNING: will call this on_changed() again
        else
            last_valid = text;
        Gtk::Entry::on_changed(); // propagate down
    }
};

しかし

これは使いやすさに反するため、組み込みの動作ではありません。ユーザーは、何かをタイプミスしたという理由だけでテキストが元に戻るのを好まないでしょう。エントリが間違った文字を捨てたことに気付く前に、バックスペースを押す可能性があります。

少なくとも、ユーザーが Enter キーを押すまで待つ必要があります (つまりsignal_activate、 override on_activate())。または、警告アイコンを表示するなど、より抜本的なことを行う必要があります。

于 2013-08-28T06:06:02.390 に答える