Anzeige:
Ergebnis 1 bis 10 von 10

Thema: for(i) g_signal_connect( ..., &i)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Ups, ausversehen übersehen, ich habe es geändert. Mein Problem ist, das ich nur als Parameter eine Adresse übergeben kann &i und keine Werte i aufgrund des gpointers. Aber danke das Du Dir die Mühe gemacht hast und mir helfen wolltest und ich so unsauberen Quelltext gepostet habe.

  2. #2
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von dml Beitrag anzeigen
    Mein Problem ist, das ich nur als Parameter eine Adresse übergeben kann &i und keine Werte i aufgrund des gpointers.
    Übergebe GINT_TO_POINTER(i) stattdessen. In dem Signal-Handler kannst du dann den Pointer mittels
    Code:
    int i = GPOINTER_TO_INT(user_data);
    wieder in einen Integerwert zurückwandeln.

    Siehe auch: https://developer.gnome.org/glib/sta...on-Macros.html
    Geändert von sommerfee (14-10-2013 um 20:05 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Muss mich vielmals bei Dir Bedankem sommerfee! Dein Tip hat mir sehr geholfen. Kann jetzt mit extern int *Ary; weiterarbeiten, was zwar ein ungeliebter Gast in Gui Entwicklungen ist, wegen der Hauptschleife (gtk_main()), doch kann ich mir jetzt erst einmal sicher sein.

    Vielen Dank für Deine Bemühung mir zu Helfen.
    Geändert von dml (15-10-2013 um 19:37 Uhr)

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Habe jetzt das gute Alte:
    Code:
    gtk_widget_set_object_name();
    gefunden.

    Code:
    void c_clicked(GtkButton *button, gpointer user_data){
          Int* array = user_data;
          int value = array[atoi(gtk_widget_get_object_name(button))];
          printf(%i\n", value);
    }
    
    void my_func( int anz, int *array){
         ...
       char[2] buffer;
    
       GtkWidget c_button[anz];
    
       for(int i=0,i<=anz, i++){
            sprintf(buffer,"%i",i);
            c_button[i] = gtk_button_new_with_label ("textt);
            gtk_widget_set_object_name(buffer);
            g_signal_connect (c_button[i], "clicked", G_CALLBACK (b_clicked), array);
       }
    
      return 0;
    }
    Und kann auf extern verzichten.
    Geändert von dml (20-10-2013 um 14:20 Uhr)

  5. #5
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Warum übergibst du nicht einfach array+i statt array?

    Code:
    void c_clicked(GtkButton *button, gpointer user_data){
          Int* array_i = user_data;
          int value = *array_i;
          printf(%i\n", value);
    }
    
    void my_func( int anz, int *array){
         ...
       GtkWidget c_button[anz];
    
       for(int i=0,i<=anz, i++){
            c_button[i] = gtk_button_new_with_label ("text");
            g_signal_connect (c_button[i], "clicked", G_CALLBACK (b_clicked), array + i);
       }
    
      return 0;
    }

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Coole Idee, kannte ich noch nicht, vor allem da set_object_name eigentlich nicht zur Wertübergabe gedacht ist. Ich werde es morgen gleich ausprobieren, vor allem, ob es auch mit struct's funktioniert.Danke.

  7. #7
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    BTW:
    Code:
    for(int i=0,i<=anz, i++){
    ist (immer noch) falsch, es muß
    Code:
    for(int i=0,i<anz, i++){
    heißen. (Siehe auch http://www.mrunix.de/forums/showpost...98&postcount=2 )

Lesezeichen

Berechtigungen

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