【发布时间】:2019-08-17 08:27:15
【问题描述】:
我使用 gtk_combo_box_text_new_with_entry 创建了一个 GtkComboBoxText。当我输入它时,每个字母都会调用“更改”回调。 如何判断用户何时完成输入?
我很乐意要求用户在最后按“Enter”,但这不会调用回调。
(我正在使用 GTK+2。)
【问题讨论】:
我使用 gtk_combo_box_text_new_with_entry 创建了一个 GtkComboBoxText。当我输入它时,每个字母都会调用“更改”回调。 如何判断用户何时完成输入?
我很乐意要求用户在最后按“Enter”,但这不会调用回调。
(我正在使用 GTK+2。)
【问题讨论】:
(Stackoverflow 提出了另一个 Q&A,它让我走上了启蒙之路。在我写 Q 之前,我在搜索时没有看到它。)
归结为
g_signal_connect(gtk_bin_get_child(GTK_BIN(cb))/*entry*/, "activate", G_CALLBACK(entryActivated), NULL); 其中 cb 是 GtkComboBoxText (GtkWidget*)。按下“Enter”时调用回调。
【讨论】:
在具有条目的 GtkComboBoxText 中按 enter 会导致子 GtkEntry 发出激活信号。
如果 GtkComboBoxText 包含一个条目(通过 'has-entry' 属性),则可以使用 gtk_combo_box_text_get_active_text() 检索其内容。可以通过在组合框上调用 gtk_bin_get_child() 来访问条目本身。
https://developer.gnome.org/gtk2/stable/GtkEntry.html#GtkEntry-activate
组合框可能被视为具有自己的应用按钮的表单的一部分。
您还可以连接到 GtkWidget 信号。我不能说是哪个事件,但是当一个小部件失去键盘焦点到同一窗口中的另一个小部件时会发出一个事件。这将允许保存在标签上。这与窗口失去焦点到另一个窗口不同,后者是 GtkWindow 上发出的信号。当窗口失去焦点时,窗口中具有焦点的小部件不会改变。
【讨论】: