TreeView question
- From: Michael White <mwhite gwmail gwu edu>
- To: gtkmm-list gnome org
- Subject: TreeView question
- Date: Tue, 7 Sep 2010 12:33:56 -0600
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---
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]