gtk - 当我单击一个小部件时,如何取消 GTK 中的所有其他小部件的焦点?
问题描述
在我的 GTK 程序中,我有一个 TextEntry 小部件和一个 TreeView 小部件。当我单击 TextEntry 小部件并选择一些文本,然后单击 TreeView 小部件时,它不会取消选择 TextEntry 小部件中的文本。当我单击 TreeView 小部件时,如何让它取消选择 TextEntry 小部件中的文本?
解决方案
您可以绑定gtk_editable_select_region
到入口的"focus-out-event"
信号,请参见下面的示例:
#include <gtk/gtk.h>
gboolean unselect_on_focus_lost (GtkWidget *widget)
{
gtk_editable_select_region (GTK_EDITABLE (widget), 0, 0);
return FALSE;
}
int main (int argc, char *argv[])
{
GtkWidget *window, *box, *entry, *button;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width (GTK_CONTAINER (window), 5);
gtk_window_set_default_size (GTK_WINDOW (window), 400, 130);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
gtk_container_add (GTK_CONTAINER (window), box);
entry = gtk_entry_new ();
gtk_entry_set_placeholder_text (GTK_ENTRY (entry), "I will lose my selection when you click the button below");
g_signal_connect (G_OBJECT (entry), "focus-out-event", G_CALLBACK (unselect_on_focus_lost), NULL);
gtk_container_add (GTK_CONTAINER (box), entry);
entry = gtk_entry_new ();
gtk_entry_set_placeholder_text (GTK_ENTRY (entry), "I will NOT lose my selection when you click the button below");
gtk_container_add (GTK_CONTAINER (box), entry);
/* I used a button instead of a treeview to keep the code short */
button = gtk_button_new_with_label("Click me");
gtk_container_add (GTK_CONTAINER (box), button);
gtk_widget_grab_focus (button);
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
推荐阅读
- javascript - 无法使用 https 可调用从云函数返回数据
- javascript - 我可以只使用一个来打印 fetch API 数据吗?
- python - 重新排列熊猫数据框
- laravel - 如何在laravel中获得与子关系的关系?
- python-3.x - 使用 seaborn 进行相关性分析:TypeError: 'float' 对象不能被解释为整数
- spring - 如果 json 对象在 post 请求中缺少键,则引发错误
- python - (Python)我怎样才能知道是否有其他相等的相反符号的值?
- python - 使用 Python 聚合另一列的值的列
- python - vscode 使用方法:from png import *
- java - 使用 HashMap 查找重复项