PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu kleinem GTK+ Programm



BeS
02-04-2003, 23:04
Hallo,
ich versuche mich gerade in GTK+. Dazu habe ich das klasische "Hello-World" Programm geschrieben:


/* -*-coding: utf-8;-*- */

#include<gtk/gtk.h>

void ende(GtkWidget *widget, gpointer data);
gboolean delete_event(GtkWidget *widget, GdkEvent event, gpointer data);
void hallo(GtkWidget *widget, gpointer data);

int main(int argc, char **argv)
{
GtkWindow *fenster;
GtkButton *knopf;

gtk_init(&argc, &argv);

fenster = g_object_new(GTK_TYPE_WINDOW,
"default-height", 200,
"default-width", 200,
"border-width", 12,
"title", "GtkHallo",
NULL);

g_signal_connect(G_OBJECT(fenster),"delete-event",G_CALLBACK(delete_event),
NULL);
g_signal_connect(G_OBJECT(fenster),"destroy",G_CALLBACK(ende), NULL);

knopf = g_object_new(GTK_TYPE_BUTTON, "label","Hallo Welt!\nHier drücken!",
"use-underline", TRUE, NULL);

g_signal_connect(G_OBJECT(knopf),"clicked",G_CALLBACK(hallo), NULL);
g_signal_connect_swapped(G_OBJECT(knopf),"clicked",
G_CALLBACK(gtk_widget_destroy),G_OBJECT(fenster));

gtk_container_add(GTK_CONTAINER(fenster), GTK_WIDGET(knopf));
gtk_widget_show_all(GTK_WIDGET(fenster));

gtk_main();

return(0);
}

void ende(GtkWidget *widget, gpointer data)
{
g_print ("destroy event occurred\n");
gtk_main_quit();
}

gboolean delete_event(GtkWidget *widget, GdkEvent event, gpointer data)
{
g_print ("delete event occurred\n");

return FALSE;
}

void hallo(GtkWidget *widget, gpointer data)
{
g_print("Hallo Welt!\n");
}


das Programm compiliert soweit auch und lässt sich starten. Wenn ich im button-label aber Umlaute verwende bekomme ich beim starten diese Meldung:
(hallo:2317): Gtk-WARNING **: Invalid input string
und es wird nur ein leerer button dargestellt.

Wenn ich im title des Fenster Umlaute verwende bekomme ich diese Meldung:
(hallo:2327): Gdk-WARNING **: Error converting from UTF-8 to 'ISO-8859-1': Invalid byte sequence in conversion input
und auch der title bleibt leer.

Woran könnte das liegen?

Danke!

Trillian
06-04-2003, 10:57
"Hier drücken" ist in der Form, wie du es benutzt, kein UTF-8 String, sondern ISO-8859-1.

gchar *utf8 = g_locale_to_utf8(iso-string, -1, NULL, NULL, NULL);

Wieso erstellst du das Fenster und den Button mit g_object_new()? gtk_window_new(), gtk_button_new() sind viel einfacher :D

kth
29-04-2003, 21:53
Die Frage solltest du eher Matthias Warkus stellen, denn das Code-Beispiel stammt fast vollständig aus "GNOME 2.0 - Das Entwickler-Handbuch". ;) :D

Auf die Bedeutung von UTF-8 wird in dem Buch direkt hinter dem Listing übrigens hingewiesen.