PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [GTK] vom zweiten fenster label text holen



xmarvel
03-04-2004, 11:55
Hi

Fange gerade erst an mit GTK Programmierung.
Ich habe ein haupt fenster mit ein Button.
dazu noch ein zweites sub_fenster mit ein Label wo "Hello World !" drin steht erstellt

Jetzt will ich ganz banal machen das wenn ich auf dem button im haupt fenster drücke einfach den Text vom Label also "Hello World !" vom sub_fenster sich holt und mittels g_print ausgibt.

Das Problem ist logischerweise das er das Label im sub_fenster nicht erkennt.
Und mit signal_connect wüsste ich jetzt auch nicht wie das zum laufen bekomme.

MFG
xmarvel

Kirsche
03-04-2004, 13:19
Hallo xmarvel,
der Befehl zum Auslesen des Labels lautet:

QString QLabel::text () const

Returns the label text. If the content is a plain or a rich text,
this is the
string that was passed to setText(). Otherwise, it is an
empty/null string.

Die Verbindung zwischen dem Button könnte so funktionieren:

...
// public deklarieren, damit auch in der Funktion slotPrint() lesbar
QWidget* hauptfenster = new QWidget(0,0,0);
QWidget* subfenster = new QWidget(0,0,0);
QLabel* label = new QLabel("Hello World", subfenster,0,0);
QButton* button = new QButton("Button", hauptfenster,0);
connect(button, SIGNAL(clicked()), this, SLOT(slotPrint()));
...

void myClass::slotPrint()
{
QString text = label->text();
// Ausgabe (g_print kenne ich nicht)
}

Ich hoffe, das hilft dir irgendwie.
Schöne Grüße,
Kirstin

xmarvel
03-04-2004, 14:33
hmm irgendwie blicke ich durch dein Code noch nicht durch hab auch schon gegoogled aber anscheinend wird sowas einfaches nicht gefragt bzw. beschrieben. :rolleyes:
Wenn dann werden nur zugriffe innerhalb eines Fensters erklärt.

Jetzt schreibe ich einfach mal ein bissel Code hier rein.

Also das erste Main fenster wird so aufgerufen:


GtkWidget*
create_main_fenster (void)
{
GtkWidget *main_fenster;
GtkWidget *vbox;
GtkWidget *text;
GtkWidget *senden;

main_fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (main_fenster), "My First Test");
gtk_window_set_default_size (GTK_WINDOW (main_fenster), 500, 400);

vbox = gtk_vbox_new (TRUE, 0);
gtk_widget_show (vbox);
gtk_container_add (GTK_CONTAINER (main_fenster), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 15);

text = gtk_entry_new ();
gtk_widget_show (text);
gtk_box_pack_start (GTK_BOX (vbox), text, FALSE, FALSE, 0);

senden = gtk_button_new_with_mnemonic ("senden");
gtk_widget_show (senden);
gtk_box_pack_start (GTK_BOX (vbox), senden, FALSE, FALSE, 0);

g_signal_connect_swapped ((gpointer) senden, "clicked",
G_CALLBACK (on_senden_clicked),
GTK_OBJECT (text));

/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (main_fenster, main_fenster, "main_fenster");
GLADE_HOOKUP_OBJECT (main_fenster, vbox, "vbox");
GLADE_HOOKUP_OBJECT (main_fenster, text, "text");
GLADE_HOOKUP_OBJECT (main_fenster, senden, "senden");

return main_fenster;
}

und das zweite fenster so:


GtkWidget*
create_fenster (void)
{
GtkWidget *fenster;
GtkWidget *label;

fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (fenster), "fenster");

label = gtk_label_new ("Hello World !");
gtk_widget_show (label);
gtk_container_add (GTK_CONTAINER (fenster), label);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);

/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (fenster, fenster, "fenster");
GLADE_HOOKUP_OBJECT (fenster, label, "label");

return fenster;
}

und hier noch die Funktion vom senden Button was zur Zeit noch leer ist.


void
on_senden_clicked (GtkWidget *widget,
gpointer user_data)
{

}

Vielleicht sieht man jetzt besser den Zusammenhang wie es zur Zeit bei mir aussieht.
Falls es wichtig ist ich erstelle das Programm mit Anjuta in Verbindung mit glade.

MFG
xmarvel

axeljaeger
03-04-2004, 15:46
Die Antwort von Kirsche ist sicher gut gemeint, aber hier nicht hilfreich, weil xmarvel GTK und nicht Qt verwendet.

Kirsche
03-04-2004, 18:12
Hallo xmarvel,
sorry, hatte nicht gesehen, dass du nicht Qt benutzt, sondern GTK. Damit kenne ich mich leider überhaupt nicht aus.
Schöne Grüße,
Kirstin

xmarvel
05-04-2004, 11:42
na ist ja kein Problem. :)
Nur wenn noch jemand mind. ein Tipp hat wonach ich speziell suchen könnte bzw. eine Lösung hat immer her damit.

MFG
xmarvel