如何在GtkEntry中捕获Enter键按下

问题描述 投票:0回答:3

我试图捕获在 GtkEntry

 中按下 
Enter 键时的情况。我发现的大多数资源都建议连接到
activate
信号,但是 GtkEntry 文档指出(重点是我的):

应用程序不应连接到它,但可以通过以下方式发出它: g_signal_emit_by_name() 如果需要控制激活 以编程方式。

我很好奇这背后的理由以及普遍接受的替代方案是什么。我知道我可以连接到

key-press-event
信号并检查关键代码,但我想知道是否有更优雅的解决方案。

gtk gtk3 gtkentry
3个回答
11
投票

这是一个键绑定信号。这意味着 GTK 已设置为当您在条目中按 Enter 时,就会发出信号。如果您想模拟按下Enter,也可以通过编程方式发出它,因此不能保证信号实际上是按键的结果。

如果您想捕获按键操作,那么最好的方法是连接到

key-press-event

也就是说,我不明白为什么你不能使用

activate
信号。大多数键绑定信号不应连接,但这个似乎是有道理的。我认为您应该在 gtk-devel 邮件列表上要求澄清,或者在 bugzilla.gnome.org 上提交错误,说明应该澄清该信号的文档。


3
投票

提到的激活信号的 GtkEntry 文档:

应用程序不应连接到它,但可以通过以下方式发出它: g_signal_emit_by_name() 如果需要控制激活 以编程方式。

...已更改为:

虽然此信号用作键绑定信号,但它也通常 应用程序使用它来拦截条目的激活。

这发生在 2012 年 6 月 11 日,提交为 4a25bac0e7685000fff90a211db6ac60f6b74ab1。提交消息是:

更新 GtkEntry::activate 的文档

删除“您不得连接” 来自该信号的消息。虽然它是一个键绑定信号,但使用它 从应用程序中得到的结果很好,事实上,这是预期的。


0
投票

现在我们处于 gtk4 状态,gtk4 的方式可能会有用

简单

g_signal_connect(e, "已更改", G_CALLBACK(on_key_press), this);

其中 e 是 GtkEntry

© www.soinside.com 2019 - 2024. All rights reserved.