thanks for that, i have now made "myLabel" an instance variable of the
class. the error that was being printed on the command line is now gone.
however, the label in the treeview is still blank. i'm expecting the column
header to be the text of myLabel...
below are the changes i've made.
---inventory_window.h----
#ifndef INVENTORY_WINDOW_H_
#define INVENTORY_WINDOW_H_
#include <gtkmm.h>
class InventoryWindow : public Gtk::Window
{
public:
InventoryWindow ();
virtual ~InventoryWindow ();
protected:
// tree model columns
class TreeModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
TreeModelColumns ()
{
add (col_item); add (col_location); add (col_amount);
}
Gtk::TreeModelColumn <Glib::ustring> col_item;
Gtk::TreeModelColumn <Glib::ustring> col_location;
Gtk::TreeModelColumn <Glib::ustring> col_amount;
};
TreeModelColumns columns_;
Gtk::ScrolledWindow scrolledWindow_;
Gtk::TreeView treeView_;
Glib::RefPtr<Gtk::ListStore> refTreeModel_;
Gtk::Table table_;
Glib::RefPtr<Gtk::ActionGroup> refActionGroup_;
Glib::RefPtr<Gtk::UIManager> refUIManager_;
Gtk::VBox vBox_;
Gtk::Label myLabel;
};
#endif /* INVENTORY_WINDOW_H_ */
---inventory_window.h----
---inventory_window.cpp----
#include <iostream>
#include "inventory_window.h"
InventoryWindow::InventoryWindow ()
: table_(2, 2, false), myLabel ("hello world")
{
set_title ("My test program");
set_default_size (380, 250);
add (vBox_);
scrolledWindow_.add (treeView_);
scrolledWindow_.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
table_.attach (scrolledWindow_, 0, 1, 0, 1);
vBox_.add (table_);
refTreeModel_ = Gtk::ListStore::create (columns_);
treeView_.set_model (refTreeModel_);
treeView_.set_hover_selection (true);
Gtk::TreeModel::Row row;
row = *(refTreeModel_->append ());
row[columns_.col_item] = "First Item";
row[columns_.col_location] = "5110";
row[columns_.col_amount] = "10";
row = *(refTreeModel_->append ());
row[columns_.col_item] = "Second Item";
row[columns_.col_location] = "1234";
row[columns_.col_amount] = "2";
row = *(refTreeModel_->append ());
row[columns_.col_item] = "Third Item";
row[columns_.col_location] = "9876";
row[columns_.col_amount] = "53";
treeView_.append_column ("Item", columns_.col_item);
treeView_.append_column ("Location", columns_.col_location);
treeView_.append_column ("Amount", columns_.col_amount);
// replace the "default" widget with a Gtk::Label for column 0
// the first column header is blank. i was expecting it to say "hello
world"
// any ideas?
treeView_.get_column (0)->set_widget (myLabel);
show_all_children ();
}
InventoryWindow::~InventoryWindow ()
{
}
---inventory_window.cpp----
2010/9/10 sledge hammer <[email protected]>
> You create "myLabel" locally in the constructor. So when the constructor
> ends the variable goes out of scope and gets destroyed.
>
> ------------------------------
> Date: Tue, 7 Sep 2010 12:33:56 -0600
> Subject: TreeView question
> From: [email protected]
> To: [email protected]
>
>
> Hi All,
>
> I am trying to set my own widget in a treeview's column, but am running
> into difficulties (code below). for this contrived example, i would like to
> replace the column header with a Gtk::Label object. however, when i do so,
> my label does not appear in the header and i get an runtime error on the
> command line: Gtk-CRITICAL **: gtk_container_remove: assertion
> `GTK_IS_WIDGET (widget)' failed
>
> i'm not understanding the error. if someone can recommend modification i
> can make to the code, i would really appreciate that! see comments and code
> in file inventory_window.cpp
>
> Thank you!
> Mike
>
>
> ---inventory_window.h---
> #ifndef INVENTORY_WINDOW_H_
> #define INVENTORY_WINDOW_H_
>
> #include <gtkmm.h>
>
> class InventoryWindow : public Gtk::Window
> {
> public:
> InventoryWindow ();
> virtual ~InventoryWindow ();
>
> protected:
> // tree model columns
> class TreeModelColumns : public Gtk::TreeModel::ColumnRecord
> {
> public:
> TreeModelColumns ()
> {
> add (col_item); add (col_location); add (col_amount);
> }
>
> Gtk::TreeModelColumn <Glib::ustring> col_item;
> Gtk::TreeModelColumn <Glib::ustring> col_location;
> Gtk::TreeModelColumn <Glib::ustring> col_amount;
> };
>
> TreeModelColumns columns_;
>
> Gtk::ScrolledWindow scrolledWindow_;
> Gtk::TreeView treeView_;
> Glib::RefPtr<Gtk::ListStore> refTreeModel_;
> Gtk::Table table_;
> Glib::RefPtr<Gtk::ActionGroup> refActionGroup_;
> Glib::RefPtr<Gtk::UIManager> refUIManager_;
> Gtk::VBox vBox_;
> };
>
> #endif /* INVENTORY_WINDOW_H_ */
> ---END inventory_window.h---
>
>
>
> ---inventory_window.cpp---
> #include <iostream>
> #include "inventory_window.h"
>
> InventoryWindow::InventoryWindow ()
> : table_(2, 2, false)
> {
> set_title ("My test program");
> set_default_size (380, 250);
> add (vBox_);
>
> scrolledWindow_.add (treeView_);
> scrolledWindow_.set_policy (Gtk::POLICY_AUTOMATIC,
> Gtk::POLICY_AUTOMATIC);
> table_.attach (scrolledWindow_, 0, 1, 0, 1);
> vBox_.add (table_);
>
> refTreeModel_ = Gtk::ListStore::create (columns_);
> treeView_.set_model (refTreeModel_);
> treeView_.set_hover_selection (true);
>
> Gtk::TreeModel::Row row;
>
> row = *(refTreeModel_->append ());
> row[columns_.col_item] = "First Item";
> row[columns_.col_location] = "5110";
> row[columns_.col_amount] = "10";
>
> row = *(refTreeModel_->append ());
> row[columns_.col_item] = "Second Item";
> row[columns_.col_location] = "1234";
> row[columns_.col_amount] = "2";
>
> row = *(refTreeModel_->append ());
> row[columns_.col_item] = "Third Item";
> row[columns_.col_location] = "9876";
> row[columns_.col_amount] = "53";
>
> treeView_.append_column ("Item", columns_.col_item);
> treeView_.append_column ("Location", columns_.col_location);
> treeView_.append_column ("Amount", columns_.col_amount);
>
> // replace the "default" widget with a Gtk::Label for column 0
> // This seems to be my problem. after compiling this, when i run it,
> // i get: Gtk-CRITICAL **: gtk_container_remove: assertion `GTK_IS_WIDGET
> (widget)' failed
> // displayed on the command line. and the first column header is blank. i
> was expecting
> // it to say "hello world"
> // any ideas?
> Gtk::Label myLabel ("hello world");
> treeView_.get_column (0)->set_widget (myLabel);
>
> show_all_children ();
> }
>
> InventoryWindow::~InventoryWindow ()
> {
>
> }
> ---END inventory_window.cpp---
>
>
>
> ---main.cpp---
> #include <gtkmm/main.h>
> #include "inventory_window.h"
>
> int main (int argc, char *argv[])
> {
> Gtk::Main kit (argc, argv);
>
> InventoryWindow window;
> Gtk::Main::run (window);
>
> return 0;
> }
> ---END main.cpp---
>
>
> _______________________________________________ gtkmm-list mailing list
> [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
>
> _______________________________________________
> gtkmm-list mailing list
> [email protected]
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
>
>
_______________________________________________
gtkmm-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list