如何在活动(单击)时清除输入框

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,在单击事件时清除它可能会造成混淆。

  1. 连接到父级 class "grab-focus" 信号
  2. 使用 gtk_entry_set_placeholder_text 使文本成为占位符(显示为略带阴影)
  3. 根据上面的说明:设置一个辅助图标(gtk_entry_set_icon_from_icon_name,图标"edit-clear-symbolic")并连接到"icon_press"信号。

补充亚历山大的回答...

如果您不知道将回调与信号相关联,您可以使用 g_signal_connect()。这需要四个参数:

  1. 我们感兴趣的对象 - 我们需要使用 G_OBJECT() 将其转换为相关类型
  2. 我们要观察的信号 - 在这种情况下 grab-focus
  3. 信号发出时调用的回调
  4. 任意用户数据(在这种情况下可能不需要)。

在这种情况下,您可以这样称呼它

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), "");
}