Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Wieder im Problem mit gtk !

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.01.2004
    Ort
    Neuenstein
    Beiträge
    19

    Exclamation Wieder im Problem mit gtk !

    Ich möchte das 3 Textfelder per gpointer übergeben aber das geht nicht.
    EAZ alleine wird ja so einwandfrei einer anderen Funktion wo der Zeiger auf EAZ zeigt angenommen. Aber es sollen noch andere übergeben werde z.B. IPPP. Das ist die Funktion:

    void connect (GtkWidget *widget, gchar *IPPP, gchar *EAZ)
    {
    const gchar *eaz_text;
    eaz_text = gtk_entry_get_text (GTK_ENTRY (EAZ));
    const gchar *entry_text;
    entry_text = gtk_entry_get_text (GTK_ENTRY (IPPP));
    }


    Und hierdurch wird sie ausgelöst:
    Und wie bekomme ich hier noch IPPP rein ?

    g_signal_connect (G_OBJECT (BUTTON1), "clicked",
    G_CALLBACK (connect),
    (gpointer) EAZ);

    Als Fehlermeldung bekomme ich immer:
    (a.out:3784): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GtkEntry'

    (a.out:3784): Gtk-CRITICAL **: file gtkentry.c: line 3797 (gtk_entry_get_text): assertion `GTK_IS_ENTRY (entry)' failed

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.01.2004
    Ort
    Neuenstein
    Beiträge
    19
    Also ich habe mich wirklich doof ausgedrückt sorry !
    Wenn die Fuktion connect aufgerufen wird kann ich mit den Zeigern IPPP und EAZ nicht arbeiten zumindestens nicht mit EAZ, ich weis nicht wie ich hiermit zwei Variablen an connect übergeben kann:

    g_signal_connect (G_OBJECT (BUTTON1), "clicked",
    G_CALLBACK (connect),
    (gpointer) IPPP);

    Naja hier is der Quellcode:

    #include <gtk/gtk.h>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>



    using namespace std;

    void connect (GtkWidget *widget, gchar *IPPP, gchar *EAZ)
    {
    string DEVICE_ON;

    const gchar *eaz_text;
    eaz_text = gtk_entry_get_text (GTK_ENTRY (EAZ));

    const gchar *entry_text;
    entry_text = gtk_entry_get_text (GTK_ENTRY (IPPP));
    DEVICE_ON = entry_text;
    system("/etc/init.d/isdnutils start ");
    system(("/usr/sbin/isdnctrl dial " + DEVICE_ON).c_str());
    }

    void disconnect( GtkWidget *widget,
    GtkWidget *IPPP)
    {
    string DEVICE_OFF;
    const gchar *entry_text;
    entry_text = gtk_entry_get_text (GTK_ENTRY (IPPP));
    DEVICE_OFF = entry_text;
    system(("/usr/sbin/isdnctrl hangup " + DEVICE_OFF).c_str());
    system("/etc/init.d/isdnutils stop");
    }


    static void quit( GtkWidget *widget,
    GdkEvent *event,
    gpointer data )
    {
    gtk_main_quit ();
    }

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


    GtkWidget *WINDOW;
    GtkWidget *BUTTON1;
    GtkWidget *BUTTON2;
    GtkWidget *BUTTON3;
    GtkWidget *IPPP;
    GtkWidget *EAZ;
    GtkWidget *LABEL_EAZ;
    GtkWidget *LABEL_IPPP;
    GtkWidget *TABLE;

    //int id;
    //id = getuid();
    //if (id!=0)
    //{
    // printf("You must be root!\n");
    // exit(EXIT_FAILURE);
    //}

    gtk_init (&argc, &argv);

    WINDOW = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title (GTK_WINDOW (WINDOW) , "Dial-0.1-alpha");

    gtk_container_set_border_width (GTK_CONTAINER (WINDOW), 25);

    LABEL_EAZ = gtk_label_new ("eaz:");
    LABEL_IPPP = gtk_label_new ("Interface:");

    TABLE = gtk_table_new (19, 0, TRUE);
    gtk_container_add (GTK_CONTAINER (WINDOW), TABLE);

    IPPP= gtk_entry_new();
    gtk_entry_set_max_length (GTK_ENTRY (IPPP), 20);
    gtk_entry_set_text (GTK_ENTRY (IPPP), "ippp0");

    EAZ = gtk_entry_new();
    gtk_entry_set_max_length (GTK_ENTRY (EAZ), 30);
    gtk_entry_set_text (GTK_ENTRY (EAZ), "06677919920");


    BUTTON1 = gtk_button_new_with_label ("connect");
    BUTTON2 = gtk_button_new_with_label ("disconnect");
    BUTTON3 = gtk_button_new_with_label ("exit");

    gtk_table_attach_defaults (GTK_TABLE (TABLE), BUTTON1, 0, 1, 0, 1);
    gtk_widget_show(BUTTON1);
    gtk_table_attach_defaults (GTK_TABLE (TABLE), BUTTON2, 0, 1, 1, 2);
    gtk_widget_show(BUTTON2);
    gtk_table_attach_defaults (GTK_TABLE (TABLE), BUTTON3, 0, 1, 2, 3);
    gtk_widget_show(BUTTON3);
    gtk_table_attach_defaults (GTK_TABLE (TABLE), LABEL_IPPP, 0, 1, 3, 4);
    gtk_widget_show(LABEL_IPPP);
    gtk_table_attach_defaults (GTK_TABLE (TABLE), IPPP, 0, 1, 4, 5);
    gtk_widget_show(IPPP);
    gtk_table_attach_defaults (GTK_TABLE (TABLE), LABEL_EAZ, 0, 1, 5, 6);
    gtk_widget_show(LABEL_EAZ);
    gtk_table_attach_defaults (GTK_TABLE (TABLE), EAZ, 0, 1, 6, 7);
    gtk_widget_show(EAZ);


    g_signal_connect (G_OBJECT (BUTTON1), "clicked",
    G_CALLBACK (connect),
    (gpointer) IPPP);


    g_signal_connect (G_OBJECT (BUTTON2), "clicked",
    G_CALLBACK (disconnect),
    (gpointer) IPPP);
    g_signal_connect (G_OBJECT (BUTTON3), "clicked",
    G_CALLBACK (quit), NULL);

    g_signal_connect (G_OBJECT (WINDOW), "delete_event",
    G_CALLBACK (quit), NULL);


    gtk_widget_show (TABLE);
    gtk_widget_show (WINDOW);
    gtk_main ();
    return 0;
    }

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.01.2004
    Ort
    Neuenstein
    Beiträge
    19
    Verdammt nochmal ich hab die Schnauze voll !
    ich habe jetzt schon alles mögliche versucht und nichts geht. GTK Foren gibt es auch keine.

    Es wird doch Jemand wissen wie ich die Inhalte der Textfelder(Entries) in der Funktion connect verwenden kann. Es ist mir auch egal wie Hauptsache es geht.

  4. #4
    Registrierter Benutzer
    Registriert seit
    10.06.2003
    Beiträge
    15
    Zitat Zitat von Schmolleg
    Verdammt nochmal ich hab die Schnauze voll !
    ich habe jetzt schon alles mögliche versucht und nichts geht. GTK Foren gibt es auch keine.
    Na, soo schlimm ist es nicht. Es gibt das GNOME Forum, und auch die GTK Mailingliste. Die sind natürlich in Englisch.

    An deiner Stelle ist googlen nach der Fehlermeldung immer hilfreich. Die Suche nach "invalid unclassed pointer in cast to `GtkEntry'" lieferte nur drei Einträge, darunter deiner...

    Vielleicht hilft Dir das also weiter. Ergänzend muß Du vielleicht noch nachschauen, was mit einem "array of pointers" gemeint ist.

    Ich persönlich habe keine Ahnung von C, und habe darum auch bisher nichts gesagt.

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.02.2003
    Beiträge
    43
    hi,

    ich habe jetz nicht alles durgelesen ... aber vieleicht hilft es ja trotzdem.


    du kannst bei g_signal_connect immer nur nen pointer übergeben. zum blei nen widget geht so:

    g_signal_connect (button, "clicked", G_CALLBACK (connect), (gpointer) widget);

    in der callback funktion kannst wieder so zugreifen:

    GtkWidget *widget =(GtkWidget*) widget;

    (wenn es das button widget ist, kannst natrülich direkt drauf zugreifen, wird ja immer übergeben)

    wenn du mehr übergeben willst musst nen struct verwenden. und nen pointer auf das struct übergeben



    gruss jebe

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •