为什么gtk_entry_get_text取不到值

软件和网站开发以及相关技术探讨
回复
头像
wade_wang
帖子: 35
注册时间: 2008-12-22 14:08

为什么gtk_entry_get_text取不到值

#1

帖子 wade_wang » 2009-10-09 22:12

这是我的代码,很简单

代码: 全选

#include<gtk/gtk.h>
#include<string.h>
#include<stdio.h>

gchar a[10];

void print(GtkWidget *widget,gpointer data)
{
    printf("%s\n",a);
}

int main(int argc,char *argv[])
{
    GtkWidget *window;
    GtkWidget *table;
    GtkWidget *entry;
    GtkWidget *button;
    

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect (G_OBJECT (window), "destroy", 
		    G_CALLBACK (gtk_main_quit), 
		    NULL);

    table=gtk_table_new(2,2,TRUE);

    entry=gtk_entry_new();

    strcpy(a,gtk_entry_get_text(GTK_ENTRY(entry)));  
    button=gtk_button_new_with_label("确认");  
    g_signal_connect (G_OBJECT (button), "clicked",
		      G_CALLBACK (print), NULL);

    gtk_table_attach(GTK_TABLE(table),entry,0,1,0,1,
                     (GtkAttachOptions) (GTK_EXPAND),
                     (GtkAttachOptions) (0),0,0);
    gtk_table_attach(GTK_TABLE(table),button,1,2,0,1,
                     (GtkAttachOptions) (GTK_EXPAND),
                     (GtkAttachOptions) (0),0,0);

    gtk_container_add(GTK_CONTAINER(window),table);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
就是按确认时,在终端显示出框内输入的内容,但就是没有显示出输入的内容,为什么呢?
头像
slax
帖子: 1099
注册时间: 2009-08-17 3:52

Re: 为什么gtk_entry_get_text取不到值

#2

帖子 slax » 2009-10-09 22:54

试试把strcpy移到printf前面再把printf改成g_print
 
 
PS :你原来的程序里无论你点击多少次,Get text 都只在程序初始化的时候仅仅运行一次。printf在GTK里不是实时输出的。


 该条信息是由slax用户用手机Ubuntu发出的,我也要用手机发送Ubuntu信息(详情请登录3g.ubuntu.org查询)
We believe that the internet should be public, open and accessible.
软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。
iceplayer! linux音乐新体验~ 最新版本4.0.5-20110520已更新!viewtopic.php?f=137&t=252461
想要iceplayer 测试版麼?加入QQ群80071264吧,在code.google也可找到
http://www.iceplayer.org/
http://jasy.ice.blog.163.com/
ho121
帖子: 207
注册时间: 2008-10-18 23:17

Re: 为什么gtk_entry_get_text取不到值

#3

帖子 ho121 » 2009-10-09 23:52

这个似乎可以正常从输出,但是有个警告,等待高手:

代码: 全选

#include<gtk/gtk.h>
#include<string.h>
#include<stdio.h>

void print(GtkWidget *widget,GtkEntry *entry)
{
    gchar *a;
    a = gtk_entry_get_text(entry);
    g_print("%s\n",a);
    g_free(a);
}

int main(int argc,char *argv[])
{
    GtkWidget *window;
    GtkWidget *table;
    GtkWidget *entry;
    GtkWidget *button;
   

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect (G_OBJECT (window), "destroy",
          G_CALLBACK (gtk_main_quit),
          NULL);

    table=gtk_table_new(2,2,TRUE);

    entry=gtk_entry_new();

    button=gtk_button_new_with_label("OK"); 
    g_signal_connect (G_OBJECT (button), "clicked",
            G_CALLBACK (print), GTK_ENTRY(entry));

    gtk_table_attach(GTK_TABLE(table),entry,0,1,0,1,
                     (GtkAttachOptions) (GTK_EXPAND),
                     (GtkAttachOptions) (0),0,0);
    gtk_table_attach(GTK_TABLE(table),button,1,2,0,1,
                     (GtkAttachOptions) (GTK_EXPAND),
                     (GtkAttachOptions) (0),0,0);

    gtk_container_add(GTK_CONTAINER(window),table);
    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}
头像
slax
帖子: 1099
注册时间: 2009-08-17 3:52

Re: 为什么gtk_entry_get_text取不到值

#4

帖子 slax » 2009-10-10 0:01

什么警告你又不说@。。。。

该条信息是由slax用户用手机Ubuntu发出的,我也要用手机发送Ubuntu信息(详情请登录3g.ubuntu.org查询)
上次由 slax 在 2009-10-10 0:05,总共编辑 1 次。
We believe that the internet should be public, open and accessible.
软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。
iceplayer! linux音乐新体验~ 最新版本4.0.5-20110520已更新!viewtopic.php?f=137&t=252461
想要iceplayer 测试版麼?加入QQ群80071264吧,在code.google也可找到
http://www.iceplayer.org/
http://jasy.ice.blog.163.com/
ho121
帖子: 207
注册时间: 2008-10-18 23:17

Re: 为什么gtk_entry_get_text取不到值

#5

帖子 ho121 » 2009-10-10 0:03

呃,对
警告是:
In function `print':
10: warning: assignment discards qualifiers from pointer target type
头像
slax
帖子: 1099
注册时间: 2009-08-17 3:52

Re: 为什么gtk_entry_get_text取不到值

#6

帖子 slax » 2009-10-10 0:09

g_free好象是给Object的,无论如何,g_free是无用的,函数结束,非Static局部变量自动释放。


 

该条信息是由slax用户用手机Ubuntu发出的,我也要用手机发送Ubuntu信息(详情请登录3g.ubuntu.org查询)
We believe that the internet should be public, open and accessible.
软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。
iceplayer! linux音乐新体验~ 最新版本4.0.5-20110520已更新!viewtopic.php?f=137&t=252461
想要iceplayer 测试版麼?加入QQ群80071264吧,在code.google也可找到
http://www.iceplayer.org/
http://jasy.ice.blog.163.com/
ho121
帖子: 207
注册时间: 2008-10-18 23:17

Re: 为什么gtk_entry_get_text取不到值

#7

帖子 ho121 » 2009-10-10 0:15

嗯,对,我理解错了,
gtk_entry_get_text返回的就是内部的 gchar* ,不能free
头像
slax
帖子: 1099
注册时间: 2009-08-17 3:52

Re: 为什么gtk_entry_get_text取不到值

#8

帖子 slax » 2009-10-10 0:15

再省点代码:没有数据计算的情况下:g_print(XXXX,gtk_entryXXXXXX);


 ii
该条信息是由slax用户用手机Ubuntu发出的,我也要用手机发送Ubuntu信息(详情请登录3g.ubuntu.org查询)
We believe that the internet should be public, open and accessible.
软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。
iceplayer! linux音乐新体验~ 最新版本4.0.5-20110520已更新!viewtopic.php?f=137&t=252461
想要iceplayer 测试版麼?加入QQ群80071264吧,在code.google也可找到
http://www.iceplayer.org/
http://jasy.ice.blog.163.com/
头像
wade_wang
帖子: 35
注册时间: 2008-12-22 14:08

Re: 为什么gtk_entry_get_text取不到值

#9

帖子 wade_wang » 2009-10-10 9:13

感谢,那如果我要向print函数传递两个GtkEntry *的参数怎么办呢?
fengshenx
帖子: 31
注册时间: 2007-10-27 19:32

Re: 为什么gtk_entry_get_text取不到值

#10

帖子 fengshenx » 2009-10-22 19:01

wade_wang 写了:感谢,那如果我要向print函数传递两个GtkEntry *的参数怎么办呢?
struct Data {
GtkEntry *entry1;
GtkEntry *entry2;
};
头像
lerosua
论坛版主
帖子: 8455
注册时间: 2007-11-29 9:41
联系:

Re: 为什么gtk_entry_get_text取不到值

#11

帖子 lerosua » 2009-10-22 19:57

const gchar* gtk_entry_get_text (GtkEntry *entry);
函数原型是 const的,并且,不要去free它
头像
cosA
帖子: 15
注册时间: 2008-08-26 18:16

Re: 为什么gtk_entry_get_text取不到值

#12

帖子 cosA » 2009-10-25 14:46

wade_wang 写了:感谢,那如果我要向print函数传递两个GtkEntry *的参数怎么办呢?
也可以用数组吧~~~
回复