DrawingArea.hppDraw-Signal nicht in gtkmm gefeuert bekommt, wenn abgeleitete Klasse nicht nennen eine übergeordnete Klasse Konstruktor
#ifndef __DRAWINGAREA
#define __DRAWINGAREA
#include <gtkmm.h>
class DrawingArea : public Gtk::DrawingArea
{
public:
bool on_my_draw(const Cairo::RefPtr<Cairo::Context>& cr);
DrawingArea(GtkDrawingArea* &cobject, const Glib::RefPtr<Gtk::Builder>& builder);
};
#endif // __DRAWINGAREA
DrawingArea.cpp
#include "DrawingArea.hpp"
#include <iostream>
DrawingArea::DrawingArea(GtkDrawingArea* &cobject, const Glib::RefPtr<Gtk::Builder>& builder)
{
this->signal_draw().connect(sigc::mem_fun(this, &DrawingArea::on_my_draw));
}
bool DrawingArea::on_my_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
std::cout << "i am here" << std::endl;
}
zusammengestellt Nachdem das in die Anwendung habe ich getestet, dass der DrawingArea
Konstruktor tatsächlich gefeuert wird (ich benutze get_widget_derived
, um es mit Glade zu verbinden, aber das sollte hier nicht wichtig sein).
Ich würde erwarten, "I am here"
zu sehen, wenn ich die Anwendung starte, oder wenn es die DrawingArea
neuzeichnen muss, aber es geschieht nicht, aus welchem Grund auch immer.
Trotz der Tatsache, dass der Bereich bereits angezeigt wird, habe ich versucht, show_all_children
auf dem Fenster zu starten, dass es ein Teil von ist, aber das hat nicht geholfen.
versucht nun
Um .hpp hinzuzufügen: Hilfe
bool DrawingArea::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
{
std::cout << "i am here!!!" << std::endl;
}
Das ist nicht:
bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr) override;
Und .cpp.
Auch habe versucht, false
als zweiter Parameter zu connect()
zu übergeben, und das hat nicht geholfen.
Beachten Sie, dass dieser Konstruktor nur erforderlich ist, wenn Sie mit Gtk :: Builder eine abgeleitete Klasse erstellen. Es sollte übrigens GtkDrawingArea * cobject, nicht GtkDrawingArea * & cobject sein. Siehe https://developer.gnome.org/gtkmm-tutorial/stable/sec-builder-using-derived-widgets.html.en – murrayc
@murrayc Aber ich habe in meiner Frage gesagt, dass ich mit Glade eine abgeleitete Klasse erstelle . Und ja, Sie haben Recht, es ist nicht notwendig, den ersten Parameter als Referenz zu übergeben. – v010dya