【问题标题】:How do I unfocus all other widgets in GTK when I click on a widget?当我单击一个小部件时,如何取消 GTK 中的所有其他小部件的焦点?
【发布时间】:2019-10-30 03:33:51
【问题描述】:

在我的 GTK 程序中,我有一个 TextEntry 小部件和一个 TreeView 小部件。当我单击 TextEntry 小部件并选择一些文本,然后单击 TreeView 小部件时,它不会取消选择 TextEntry 小部件中的文本。当我单击 TreeView 小部件时,如何让它取消选择 TextEntry 小部件中的文本?

【问题讨论】:

    标签: gtk


    【解决方案1】:

    您可以将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;
    }
    

    【讨论】:

    • 你的 gboolean 函数应该返回一些东西。
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2023-03-11
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多