gtkmm + RefPtr



  • hi,

    kann mir bitte mal jemand ein Beispiel zu RefPtr zeigen. Ich dreh sonst gleich durch. Warum funktioniert das hier nicht:

    Glib::RefPtr<Gtk::TreeView *> ref = new Gtk::TreeView();
    

    als fehler bekomme ich das hier:

    /usr/include/glibmm-2.4/glibmm/refptr.h:179: Fehler: Abfrage des Elementes »unreference« in 
    »*((Glib::RefPtr<Gtk::TreeView*>*)this)->Glib::RefPtr<Gtk::TreeView*>::pCppObject_«,
    das vom Nicht-Klassentyp »Gtk::TreeView*« ist
    make: *** [mainwindow.o] Fehler 1
    

    danke!



  • Glib::RefPtr<Gtk::TreeView> treeview(new Gtk::TreeView());
    


  • evilissimo schrieb:

    Glib::RefPtr<Gtk::TreeView> treeview(new Gtk::TreeView());
    

    okay, danke der code funktioniert soweit. allerdings funktioniert das nicht so wie ich will ^^

    MainWindow::MainWindow()
    : pTreeView( NULL )
    {
        set_title( "" );
        resize( 704, 470 );
    }
    
    MainWindow::~MainWindow()
    {
    
    }
    
    void MainWindow::set_glade( Glib::RefPtr<Gnome::Glade::Xml> refGlade )
    {
        refGlade->reparent_widget( "main_vbox", *this );
    
        try
        {
            refGlade->get_widget<Gtk::TreeView>( "streamlist_treeview", pTreeView );
        }
        catch( const Gnome::Glade::XmlError &xmlError )
        {
            std::cout << xmlError.what() << std::endl;
    
            return;
        }
    
        std::cout << pTreeView->get_name() << std::endl;
    }
    
    Glib::RefPtr<Gtk::TreeView> MainWindow::get_treeview()
    {
        return Glib::RefPtr<Gtk::TreeView>( pTreeView );
    }
    

    als fehler bekomm ich das hier:

    streamlist_treeview
    
    (msdclient:10756): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
    
    (msdclient:10756): GLib-GObject-CRITICAL **: g_signal_emit_valist: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
    
    (msdclient:10756): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
    
    (msdclient:10756): GLib-GObject-CRITICAL **: g_signal_handlers_destroy: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
    
    (msdclient:10756): GLib-GObject-WARNING **: instance with invalid (NULL) class pointer
    
    (msdclient:10756): GLib-GObject-CRITICAL **: g_signal_handlers_destroy: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
    Segmentation fault (core dumped)
    

    pTreeView ist wie man an der ausgabe sehen kann keinesfalls NULL. Was ist das für ein problem und warum funktioniert es wenn ich new Gtk::TreeView statt pTreeView nehme?

    kleine frage noch: warum muss man als Template Gtk::TreeView nehmen? ( ohne * )

    danke!


Anmelden zum Antworten