Me estoy perdiendo algo obvio con GtkBuilder claro y señales de conexión. ¿Ayuda?
-
29-09-2019 - |
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?
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.