Autor
|
Tema: Problema con GTK y C (Leído 4,652 veces)
|
erikcmauricio
Desconectado
Mensajes: 8
|
Buenas tardes..... He estado tratando de hacer un simple programa en GTK con Glade que al hacer click en un botón coloque un texto en un label.... todo va bien si escribo así void texto_label(void) { char text[] = "hola como estan"; } gtk_label_set_text (GTK_LABEL(label), text); Hasta aquí funciona perfecto.... Luego cree un .h y un .c llamados venta.c venta.h venta.h #ifndef VENTA_H_INCLUDED #define VENTA_H_INCLUDED char letras (void); #endif Ahora venta.c #include "venta.h" char letras(void) { char a; a = "hola amigos"; return a; } en el programa principal que se llama ventana.c //cree una funcion llamada texto_label void texto_label(void) { char text[] = letras(); gtk_label_set_text (GTK_LABEL(label), text); }
Al compilar da error.... he probado todo lo habido y por haber y nada.... Lo que quiero es que al hacer click en el botón... la función letras de venta.c devuelva el texto y lo coloque en el label... Gracias [MOD] Usar etiquetas GeSHi, para publicar codigo.
|
|
« Última modificación: 27 Julio 2017, 05:14 am por simorg »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Tienes varios errores importantes en estos códigos. char letras(void) { char a; a = "hola amigos"; return a; }
Una cadena no es un char. Es un char*. Puntero a char, no un solo char. Tendrás que cambiar el retorno de la función y la variable "a" (o, simplemente, cambiarlo por return "hola amigos";. Luego: void texto_label(void) { char text[] = "hola como estan"; } gtk_label_set_text (GTK_LABEL(label), text);
No es posible que accedas a la variable "text" desde fuera de la función. No sé en qué contexto haces eso. En cualquier caso, para próximos problemas, pon el error. El error da toda la información necesaria para resolver el problema. El error también dirá en qué líneas ocurre, así que es interesante que nos digas en qué línea te lo daba.
|
|
|
En línea
|
|
|
|
erikcmauricio
Desconectado
Mensajes: 8
|
Hola..... gracias por responder.... Hice lo que me dijiste en venta.c y no funciona... #include "venta.h" #include <stdio.h> #include <stdlib.h> char letras(void) { return "Hoy es un gran dia"; } Ahora en el .c principal..... void texto_label(void) { gtk_label_set_text(GTK_LABEL(label), letras()); } Esto es lo que muestra a la hora de compilar............ In file included from ventana.c:4:0: venta.h:12:7: warning: extra tokens at end of #endif directive #endif ^ ventana.c: In function ‘texto_label’: ventana.c:40:39: warning: passing argument 2 of ‘gtk_label_set_text’ makes pointer from integer without a cast gtk_label_set_text(GTK_LABEL(label), letras()); ^ In file included from /usr/include/gtk-2.0/gtk/gtkaccellabel.h:38:0, from /usr/include/gtk-2.0/gtk/gtk.h:35, from ventana.c:1: /usr/include/gtk-2.0/gtk/gtklabel.h:112:23: note: expected ‘const gchar *’ but argument is of type ‘char’ void gtk_label_set_text (GtkLabel *label, ^ /tmp/ccgL6s1G.o: En la función `texto_label': /home/erikc/Documentos/ventana-2/ventana.c:40: referencia a `letras' sin definir collect2 : error : ld returned 1 exit status
[MOD] Usar etiquetas GeSHi, para publicar codigo.
|
|
« Última modificación: 27 Julio 2017, 05:13 am por simorg »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
No del todo: Una cadena no es un char. Es un char*. Puntero a char, no un solo char. Tendrás que cambiar el retorno de la función
Es decir: char* letras()
|
|
« Última modificación: 27 Julio 2017, 04:04 am por ivancea96 »
|
En línea
|
|
|
|
erikcmauricio
Desconectado
Mensajes: 8
|
Sorry... para que se entienda bien debo mostrar el código completo.... es este en ventana.c (el c principal) #include <gtk/gtk.h> #include <stdio.h> #include <stdlib.h> #include "venta.h" //extern char letras(); GtkWidget *label; GtkWidget *button; GtkWidget *button2; GtkWidget *button3; GtkWidget *button4; GtkWidget *texto; GtkWidget *labelMsg; GtkWidget *buttonMsg; GtkWidget *form_msg; /*char letras(void) { //return("Eres un playo"); char textFunc[] = "pulga h"; return(textFunc); }*/ void texto_label(void) { //char text[] = letras(); //text = letras(); //gchar b; //b = text; //b=text; //char b[] = letras(); //text = letras(void); //text == "pulga"; //gtk_label_set_text(GTK_LABEL(label), "Hola guineo plátano"); //gtk_label_set_text(GTK_LABEL(label), letras());// cierra la ventana //gtk_label_set_text(GTK_LABEL(label), letras(void));//error gtk_label_set_text(GTK_LABEL(label), letras()); //gtk_label_set_text(GTK_LABEL(label), b); //gtk_label_set_text(GTK_LABEL(label), text); //char cadena[20]; //itoa (resSuma, cadena, 10); // el 10 es base decimal //gtk_label_set_text(GTK_LABEL(label), cadena); } int main(int argc, char *argv[]) { GtkBuilder *gtkBuilder; GtkWidget *window; gtk_init(&argc, &argv); gtkBuilder = gtk_builder_new(); gtk_builder_add_from_file(gtkBuilder, "ventana.glade", NULL); window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "ventana1")); label = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "label1")); button = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton1")); button2 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton2")); button3 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton3")); button4 = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "Boton4")); //gtk_window_set_title(GTK_WINDOW(window), "Establece título....."); g_signal_connect(GTK_OBJECT(button2),"clicked",G_CALLBACK(texto_label),NULL); g_object_unref(G_OBJECT(gtkBuilder)); gtk_widget_show(window); gtk_main(); return 0; }
[MOD] Usar etiquetas GeSHi, para publicar codigo.
|
|
« Última modificación: 27 Julio 2017, 05:11 am por simorg »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
La función letras es incorrecta, el retorno debe ser "char*", no "char". ¿Lo has cambiado?
|
|
|
En línea
|
|
|
|
erikcmauricio
Desconectado
Mensajes: 8
|
Sorry por las estupideces que escribí en el texto.... a mucho estrés y darle y darle....
A los botones 1, 3 y 4 les eliminé sus funciones....
Básicamente es el botón 2......
si escribo algo como char textFunc[] = "hola soy un texto";
y lo agrego en el label.... de esta manera
gtk_label_set_text(GTK_LABEL(label), textFunc);
Funciona....
Pero de ninguna manera pasa la cadena de la función letras, definida en venta.h y implementada en venta.c
|
|
|
En línea
|
|
|
|
erikcmauricio
Desconectado
Mensajes: 8
|
La función letras en ventana.c si está comentada..... la que sirve es la que está implementada en venta.c.... venta.c #include "venta.h" //#include <stdio.h> //#include <stdlib.h> //const char letras(void) char letras(void) //char *letras(void) { return "Hoy es un gran dia"; // char *textFunc; // textFunc = "pulga h"; //char textFunc[] = "pulga h"; //return (textFunc); // return textFunc; //char a[] = "pulguita"; /*char a; a = "pulguita"; return a; */ } /*char letras(void) { //return letras = "hello"; letras = "hello"; }*/ /*int Suma(int num1, int num2) { return (num1 + num2); }*/
[MOD] Usar etiquetas GeSHi, para publicar codigo.
|
|
« Última modificación: 27 Julio 2017, 05:10 am por simorg »
|
En línea
|
|
|
|
erikcmauricio
Desconectado
Mensajes: 8
|
Voy a probar con char*
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema BlueZScanner y problema de conexión
Hacking Mobile
|
Kasswed
|
3
|
6,320
|
6 Mayo 2006, 22:04 pm
por Gospel
|
|
|
(Consulta) Problema con rand en C - Problema de multiple Choice
Programación C/C++
|
palacio29
|
3
|
2,589
|
20 Julio 2016, 18:38 pm
por palacio29
|
|
|
(Consulta) Problema con rand en C - Problema de multiple Choice
Programación C/C++
|
palacio29
|
1
|
2,352
|
25 Julio 2016, 17:54 pm
por AlbertoBSD
|
|
|
Problema con driver touchscreen de laptop y problema con navegador
Windows
|
aquisgran
|
3
|
3,518
|
26 Septiembre 2016, 03:08 am
por [Arg] $triker;
|
|
|
Problema al mover Bound Import Problema para copiar y pegar
Análisis y Diseño de Malware
|
kisk
|
2
|
3,829
|
4 Abril 2017, 03:13 am
por kisk
|
|