中按下Enter 键时的情况。我发现的大多数资源都建议连接到
activate
信号,但是 GtkEntry 的 文档指出(重点是我的):
应用程序不应连接到它,但可以通过以下方式发出它: g_signal_emit_by_name() 如果需要控制激活 以编程方式。
我很好奇这背后的理由以及普遍接受的替代方案是什么。我知道我可以连接到
key-press-event
信号并检查关键代码,但我想知道是否有更优雅的解决方案。
这是一个键绑定信号。这意味着 GTK 已设置为当您在条目中按 Enter 时,就会发出信号。如果您想模拟按下Enter,也可以通过编程方式发出它,因此不能保证信号实际上是按键的结果。
如果您想捕获按键操作,那么最好的方法是连接到
key-press-event
。
也就是说,我不明白为什么你不能使用
activate
信号。大多数键绑定信号不应连接,但这个似乎是有道理的。我认为您应该在 gtk-devel 邮件列表上要求澄清,或者在 bugzilla.gnome.org 上提交错误,说明应该澄清该信号的文档。
提到的激活信号的 GtkEntry 文档:
应用程序不应连接到它,但可以通过以下方式发出它: g_signal_emit_by_name() 如果需要控制激活 以编程方式。
...已更改为:
虽然此信号用作键绑定信号,但它也通常 应用程序使用它来拦截条目的激活。
这发生在 2012 年 6 月 11 日,提交为 4a25bac0e7685000fff90a211db6ac60f6b74ab1。提交消息是:
更新 GtkEntry::activate 的文档
删除“您不得连接” 来自该信号的消息。虽然它是一个键绑定信号,但使用它 从应用程序中得到的结果很好,事实上,这是预期的。
现在我们处于 gtk4 状态,gtk4 的方式可能会有用
简单
g_signal_connect(e, "已更改", G_CALLBACK(on_key_press), this);
其中 e 是 GtkEntry