如何在活动(单击)时清除输入框
how to clear the entry box when it's active(clicked)
我想清除我的输入框,以便在我想再次输入内容时清楚。
我实现了一个简单的 Webbrowser。
在条目框中始终是 url 但我一直在寻找的是,如果我单击(激活)条目框,则应清除条目框。
我希望我能做这样的事情:
if(gtk_window_get_focus(GTK_WINDOW(w->window)) == w->entry)
gtk_entry_set_text (GTK_ENTRY(w->entry), "");
但我真的不知道在哪里做,也不知道它是如何检测到输入框被点击的。
有几种方法,但在我们开始之前:用户可能想要复制 URL,在单击事件时清除它可能会造成混淆。
- 连接到父级 class
"grab-focus"
信号
- 使用
gtk_entry_set_placeholder_text
使文本成为占位符(显示为略带阴影)
- 根据上面的说明:设置一个辅助图标(
gtk_entry_set_icon_from_icon_name
,图标"edit-clear-symbolic")并连接到"icon_press"
信号。
补充亚历山大的回答...
如果您不知道将回调与信号相关联,您可以使用 g_signal_connect()
。这需要四个参数:
- 我们感兴趣的对象 - 我们需要使用
G_OBJECT()
将其转换为相关类型
- 我们要观察的信号 - 在这种情况下
grab-focus
- 信号发出时调用的回调
- 任意用户数据(在这种情况下可能不需要)。
在这种情况下,您可以这样称呼它
g_signal_connect(G_OBJECT(w->entry), "grab-focus", G_CALLBACK(on_input_focus), NULL);
如果您检查 grab-focus
signal 回调的签名,您会看到它接受两个参数,returns 什么都不接受。最后一个参数是任意用户数据,它是 g_signal_connect()
函数中的最后一个参数;我们没有设置它,可以忽略它。第一个参数是触发信号的小部件 - 我们可以将其转换为 GtkEntry
.
void on_input_focus(GtkWidget *w, gpointer data) {
gtk_entry_set_text(GTK_ENTRY(w), "");
}
我想清除我的输入框,以便在我想再次输入内容时清楚。 我实现了一个简单的 Webbrowser。 在条目框中始终是 url 但我一直在寻找的是,如果我单击(激活)条目框,则应清除条目框。
我希望我能做这样的事情:
if(gtk_window_get_focus(GTK_WINDOW(w->window)) == w->entry)
gtk_entry_set_text (GTK_ENTRY(w->entry), "");
但我真的不知道在哪里做,也不知道它是如何检测到输入框被点击的。
有几种方法,但在我们开始之前:用户可能想要复制 URL,在单击事件时清除它可能会造成混淆。
- 连接到父级 class
"grab-focus"
信号 - 使用
gtk_entry_set_placeholder_text
使文本成为占位符(显示为略带阴影) - 根据上面的说明:设置一个辅助图标(
gtk_entry_set_icon_from_icon_name
,图标"edit-clear-symbolic")并连接到"icon_press"
信号。
补充亚历山大的回答...
如果您不知道将回调与信号相关联,您可以使用 g_signal_connect()
。这需要四个参数:
- 我们感兴趣的对象 - 我们需要使用
G_OBJECT()
将其转换为相关类型 - 我们要观察的信号 - 在这种情况下
grab-focus
- 信号发出时调用的回调
- 任意用户数据(在这种情况下可能不需要)。
在这种情况下,您可以这样称呼它
g_signal_connect(G_OBJECT(w->entry), "grab-focus", G_CALLBACK(on_input_focus), NULL);
如果您检查 grab-focus
signal 回调的签名,您会看到它接受两个参数,returns 什么都不接受。最后一个参数是任意用户数据,它是 g_signal_connect()
函数中的最后一个参数;我们没有设置它,可以忽略它。第一个参数是触发信号的小部件 - 我们可以将其转换为 GtkEntry
.
void on_input_focus(GtkWidget *w, gpointer data) {
gtk_entry_set_text(GTK_ENTRY(w), "");
}