13

Enterで押されたときにキーをキャプチャしようとしていGtkEntryます。私が見つけたリソースのほとんどは、activate信号への接続を提案していますが、GtkEntry のドキュメントには次のように記載されています (強調は私のものです)。

アプリケーションはそれに接続すべきではありませんが、プログラムでアクティベーションを制御する必要がある場合は、g_signal_emit_by_name() を使用して発行できます。

この背後にある理論的根拠と、一般的に受け入れられている代替案が何であるかについて、私は興味があります. 信号に接続してkey-press-eventキーコードを確認できることはわかっていますが、もっと洗練された解決策があるかどうか疑問に思っています。

4

2 に答える 2

10

これはキーバインディングシグナルです。つまり、GTKはEnter、エントリを押すと信号が発信されるように設定されています。押すことをシミュレートしたい場合は、プログラムで出力することもできるEnterため、信号が実際にキーを押した結果であるという保証はありません。

キーの押下をキャプチャする場合は、に接続するのが最善の方法ですkey-press-event

とはいえ、なぜ信号が使えないのかわかりませんactivate。ほとんどのキーバインディング信号は接続されるべきではありませんが、これは理にかなっているようです。gtk-develメーリングリストで説明を求めるか、bugzilla.gnome.orgにバグを報告して、このシグナルのドキュメントを明確にする必要があると言ってください。

于 2011-12-16T08:24:01.210 に答える
3

アクティブ化シグナルに関する前述の GtkEntry ドキュメント:

アプリケーションはそれに接続すべきではありませんが、プログラムでアクティベーションを制御する必要がある場合は、g_signal_emit_by_name() を使用して発行できます。

...次のように変更されました:

このシグナルはキーバインドシグナルとして使用されますが、エントリのアクティブ化を傍受するためにアプリケーションによって一般的に使用されます。

これは 2012 年 6 月 11 日にコミット4a25bac0e7685000fff90a211db6ac60f6b74ab1で発生しました。コミットメッセージは次のとおりです。

GtkEntry::activate のドキュメントを更新

この信号から「接続しないでください」というメッセージを削除します。これはキーバインディング シグナルですが、アプリケーションから使用することは問題なく、実際に想定されています。

于 2014-10-29T23:09:28.407 に答える