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

时间:2019-06-11 19:19:56

标签: c linux gtk3

我想清除我的输入框,以便当我想再次输入内容时很清楚。 我实现了一个简单的Web浏览器。 在输入框中始终是URL,但我一直在寻找的是,如果单击(激活)输入框,则应清除输入框。

我希望我可以做这样的事情:

if(gtk_window_get_focus(GTK_WINDOW(w->window)) == w->entry)
          gtk_entry_set_text (GTK_ENTRY(w->entry), "");

但是我真的不知道该在哪里做以及它如何知道它可以检测到点击条目。

2 个答案:

答案 0 :(得分:1)

有两种方法,但是在我们开始之前:用户可能想要复制URL,在单击事件时清除URL可能会造成混淆。

  1. 连接到父类"grab-focus"信号
  2. 使用gtk_entry_set_placeholder_text将文本设为占位符(显示为略带阴影)
  3. 符合上述说明:设置辅助图标(gtk_entry_set_icon_from_icon_name,图标“ edit-clear-symbolic”)并连接到"icon_press"信号。

答案 1 :(得分:0)

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

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

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

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

g_signal_connect(G_OBJECT(w->entry), "grab-focus", G_CALLBACK(on_input_focus), NULL);

如果检查g_signal_connect()的回调的签名,您将看到它接受两个参数并且不返回任何内容。最后一个参数是任意用户数据,它是g_signal_connect()函数中的最后一个参数;我们没有设置它,可以忽略它。第一个参数是触发信号的窗口小部件-我们可以将其转换为GtkEntry

void on_input_focus(GtkWidget *w, gpointer data) {
    gtk_entry_set_text(GTK_ENTRY(w), "");
}