从GtkEntry获取带有“text”属性的文本

问题描述 投票:0回答:1

当按下按钮时,我需要从一堆GtkEntries中获取文本。我创建了一个自定义结构并将其传递给按钮的单击回调。我不想使用gtk_entry_get_text(*entry),因为我需要传递GtkEntries的结构。

typedef struct{
    const gchar* id1;
    const gchar* id2;
} EntryData;

static void on_click(GtkWidget *widget,
                         gpointer data) {

    EntryData* d= (EntryData*)data;
    printf ("Entry contents: %s\n", d->id1);
    printf ("Entry contents: %s\n", d->id2);
}

int main(int argc,char *argv[]) {

    // ....
    GtkButton *button_create_hp;
    GtkEntry *entry_id1;
    GtkEntry *entry_id2;


    gtk_init(&argc, &argv);

   //...... widget and object initialization


    gtk_entry_set_text(entry_ssd,"");

    gchar *strval1="sl";
    gchar *strval2="sl";

    g_object_get(G_OBJECT (entry_id1), "text", &strval1,NULL);
    g_object_get(G_OBJECT (entry_id2), "text", &strval2,NULL);

    EntryData entryData={
            .id1= strval1,
            .id2= strval2
    };


    g_signal_connect (button_create_hp, "clicked", G_CALLBACK(on_click),&entryData);


    gtk_main();

    return 0;
}

我也尝试过g_object_get_property (G_OBJECT (entry_id), "text", &val);

在这两种情况下,单击按钮时未打印更改的值。你能建议一个正确的方法来获取值并从GtkEntries传递它

c gtk3 gnome
1个回答
1
投票

the docs来看并不是很明显,但是当你以某种方式修改文本时,它可能会移动到另一个位置,使前一个指针无效。

如果你不想将GtkEntries传递给你的结构,你可以在EntryBuffer发出"deleted-text""inserted-text"(或连接到GtkEntry的"notify::text")时更新指针

© www.soinside.com 2019 - 2024. All rights reserved.