Pregunta

Me gano la interfaz con el claro. Funciona genial. Escribo una diminuta función principal que llama a GtkBuilder y hace todo en el archivo claro.

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");

funciona incluso mejor. Luego llego mi aparato

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

Ahora qué? Todos los ejemplos que he encontrado para conectar un controlador de señal no se construye por GtkBuilder. Si instancia su propia clase para representar / mango / rendir un botón que es fácil de conectar un controlador de señal a ella, pero yo estoy usando GtkBuilder y no veo cómo escribir una función que entonces puedo conectar a mi aparato, ya que no era el que crea el objeto de botón, GtkBuilder era.

Cómo hago una subclase de GtkButton escribir mi función y luego apunta a eso? Pero mi clase no se crean instancias por GtkBuilder.

Yo sólo no lo consigue. Ayuda?

¿Fue útil?

Solución

No se está perdiendo algo obvio. Parece que gtkmm no proporciona una versión de C ++ de la función gtk_builder_connect_signals(), que es como se hace en C. He hecho un poco de búsqueda de Google, pero no puedo averiguar por qué iban a dejarlo fuera.

Puede acceder a la función C directamente como esto:

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

Otros consejos

usted debe utilizar su propia clase de botón como esto:

#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

Ahora en algún lugar de su código principal (lo pongo en mi clase principal que es de público del Gtk :: Window):

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

He encontrado esto en el funcionario gtkmm manual de hace un mes y usarlo con éxito en mis aplicaciones GUI.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top