Domanda

io faccio la mia interfaccia con radura. Funziona alla grande. Scrivo un piccolo piccolo funzione principale che chiama GtkBuilder e rende tutto nel file radura.

Gtk::Main kit(num, opts);
// Load the GtkBuilder file and instantiate its widgets:
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");

funziona anche meglio. Poi ho il mio widget di

Gtk::Button *sf = 0;
builder->get_widget("button", sf);

Ora che cosa? Ogni esempio che ho trovato per collegare un gestore di segnale non è costruita da GtkBuilder. Se si istanzia la propria classe per rappresentare / maniglia / rendering di un tasto è facile collegare un gestore di segnale ad esso, ma sto usando GtkBuilder e non vedo come scrivere una funzione che posso quindi collegare al mio widget di, dal momento che non ero quello di creare l'oggetto pulsante, GtkBuilder era.

faccio a fare una sottoclasse di GtkButton scrittura mia funzione poi punto a questo? Ma la mia classe non viene istanziato da GtkBuilder.

Ho appena non si ottiene esso. Aiuto?

È stato utile?

Soluzione

Non manca qualcosa di ovvio. Sembra che gtkmm non fornisce una versione C ++ della funzione gtk_builder_connect_signals(), che è come lo si fa in C. Ho fatto un po 'di ricerca di Google, ma non riesco a capire perché se ne sarebbero andati fuori.

È possibile accedere alla funzione C direttamente in questo modo:

Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("dsg.glade", "mainwindow");
gtk_builder_connect_signals(builder->gobj(), callback_data);

Altri suggerimenti

si dovrebbe usare la propria classe pulsante mi piace questo:

#ifndef _MYBUTTON_H_
#define _MYBUTTON_H_

#include <gtkmm.h>
class MyButton : public Gtk::Button { 
  public:
    inline MyButton(BaseObjectType* cobject) : Gtk::Button(cobject) {};
  protected:
    // overwrite virtual void on_pressed() function of Gtk::Button
    void on_pressed() { /* do something */ };
};
#endif

Ora da qualche parte nel codice principale (l'ho messo nella mia classe core, che è di pubblico di Gtk :: Window):

MyButton *sf;
refBuilder_->get_widget_derived("button", sf);

Ho trovato questo nella Gazzetta gtkmm manuale qualche mese fa e utilizzarlo con successo nelle mie applicazioni GUI.

Spero che questo aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top