【问题标题】:How to select text in GtkEntry如何在 GtkEntry 中选择文本
【发布时间】:2026-01-17 15:15:01
【问题描述】:

我有带有 GtkEntry 的对话窗口。我想在对话框窗口对用户可见后立即选择条目中的所有文本。我试过这个,但它不起作用,我看不到任何选择:

static void OnEntryShow(GtkWidget *entry, gpointer user_data)
{
     gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
}
...
gtk_entry_set_text(GTK_ENTRY(myEntry), "text");
g_signal_connect(myEntry, "show", G_CALLBACK(OnEntryShow), NULL);
if (gtk_dialog_run(GTK_DIALOG(myDialog)) == GTK_RESPONSE_OK)
...

如何在 GtkDialog 可见后在 GtkEntry 中选择文本?

【问题讨论】:

  • 你的方法应该有效。这可能听起来有点明显,但条目是否设置了文本?你是如何设置文本的?
  • 信号处理器真的被调用了吗?可能在您连接信号时小部件已经显示。

标签: c gtk gtkentry


【解决方案1】:

也许您希望 GtkEntry 获得焦点?

试试这个:

gtk_widget_grab_focus (entry);

entry 在这种情况下是指向您的 GtkEntry 小部件的指针。

函数的文档可以在here找到。

【讨论】:

    【解决方案2】:

    您应该使用记录在案的函数here

    text_entry.select_region(0,2) 将选择前两个字符,而(0, -1) 将选择整个文本。

    【讨论】:

      【解决方案3】:

      这是我使用 get_iter_at_offsetselect_range 函数用于 gtkmm 的解决方案。

      Gtk::TextIter match_start = m_textBuffer->get_iter_at_offset(0);
      Gtk::TextIter match_end = m_textBuffer->get_iter_at_offset(-1); // -1 to select all
      m_textBuffer->select_range(match_start,match_end);
      

      【讨论】: