| 
 | 
 
 
发表于 2007-3-13 19:50:21
|
显示全部楼层
 
 
 
我从数据库中读取数据: 
 
for(int i=0;i<rs_main.GetRecordCount();++i) 
  { 
    Gtk::TreeModel::Row row = *(refTreeModel_guest_room->append()); 
  row[columns_guest_room.room_id] = rs_main[0]; 
   row[columns_guest_room.room_grade] = rs_main[1]; 
   row[columns_guest_room.room_type] = rs_main[2]; 
   row[columns_guest_room.room_price] = rs_main[3]; 
   row[columns_guest_room.room_mode] = rs_main[4]; 
  } 
   
 
 
 
我的大概意思 就是 单击 第一行数据  然后 弹出个 新窗口 ,在新窗口要用到此行的数据 
 
 
  
 
 
 
//基本上按照gtkmm官方给的例子做的 
 
 
 
File: examplewindow.h  
 
#ifndef GTKMM_EXAMPLEWINDOW_H 
#define GTKMM_EXAMPLEWINDOW_H 
 
#include <gtkmm.h> 
 
class ExampleWindow : public Gtk::Window 
{ 
public: 
  ExampleWindow(); 
  virtual ~ExampleWindow(); 
 
protected: 
  //Signal handlers: 
  virtual void on_button_quit(); 
 
  //Tree model columns: 
  class ModelColumns : public Gtk::TreeModel::ColumnRecord 
  { 
  public: 
 
    ModelColumns() 
    { add(m_col_id); add(m_col_name); add(m_col_number); add(m_col_percentage);} 
 
    Gtk::TreeModelColumn<unsigned int> m_col_id; 
    Gtk::TreeModelColumn<Glib::ustring> m_col_name; 
    Gtk::TreeModelColumn<short> m_col_number; 
    Gtk::TreeModelColumn<int> m_col_percentage; 
  }; 
 
  ModelColumns m_Columns; 
 
  //Child widgets: 
  Gtk::VBox m_VBox; 
 
  Gtk::ScrolledWindow m_ScrolledWindow; 
  Gtk::TreeView m_TreeView; 
  Glib::RefPtr<Gtk::ListStore> m_refTreeModel; 
 
  Gtk::HButtonBox m_ButtonBox; 
  Gtk::Button m_Button_Quit; 
}; 
 
#endif //GTKMM_EXAMPLEWINDOW_H 
 
File: examplewindow.cc  
 
#include <iostream> 
#include "examplewindow.h" 
 
ExampleWindow::ExampleWindow() 
: m_Button_Quit("Quit") 
{ 
  set_title("Gtk::TreeView (ListStore) example"); 
  set_border_width(5); 
  set_default_size(400, 200); 
 
  add(m_VBox); 
 
  //Add the TreeView, inside a ScrolledWindow, with the button underneath: 
  m_ScrolledWindow.add(m_TreeView); 
 
  //Only show the scrollbars when they are necessary: 
  m_ScrolledWindow.set_policy(Gtk: OLICY_AUTOMATIC, Gtk: OLICY_AUTOMATIC); 
 
  m_VBox.pack_start(m_ScrolledWindow); 
  m_VBox.pack_start(m_ButtonBox, Gtk: ACK_SHRINK); 
 
  m_ButtonBox.pack_start(m_Button_Quit, Gtk: ACK_SHRINK); 
  m_ButtonBox.set_border_width(5); 
  m_ButtonBox.set_layout(Gtk::BUTTONBOX_END); 
  m_Button_Quit.signal_clicked().connect( sigc::mem_fun(*this, &ExampleWindow: n_button_quit) ); 
 
  //Create the Tree model: 
  m_refTreeModel = Gtk::ListStore::create(m_Columns); 
  m_TreeView.set_model(m_refTreeModel); 
 
  //Fill the TreeView's model 
  Gtk::TreeModel::Row row = *(m_refTreeModel->append()); 
  row[m_Columns.m_col_id] = 1; 
  row[m_Columns.m_col_name] = "Billy Bob"; 
  row[m_Columns.m_col_number] = 10; 
  row[m_Columns.m_col_percentage] = 15; 
   
  row = *(m_refTreeModel->append()); 
  row[m_Columns.m_col_id] = 2; 
  row[m_Columns.m_col_name] = "Joey Jojo"; 
  row[m_Columns.m_col_number] = 20; 
  row[m_Columns.m_col_percentage] = 40; 
   
  row = *(m_refTreeModel->append()); 
  row[m_Columns.m_col_id] = 3; 
  row[m_Columns.m_col_name] = "Rob McRoberts"; 
  row[m_Columns.m_col_number] = 30; 
  row[m_Columns.m_col_percentage] = 70; 
 
  //Add the TreeView's view columns: 
  m_TreeView.append_column("ID", m_Columns.m_col_id); //This number will be shown with the default numeric formatting. 
  m_TreeView.append_column("Name", m_Columns.m_col_name); 
 
  m_TreeView.append_column_numeric("Formatted number", m_Columns.m_col_number, "%010d" /* 10 digits, using leading zeroes. */); 
    
  //Display a progress bar instead of a decimal number: 
  Gtk::CellRendererProgress* cell = new Gtk::CellRendererProgress; 
  int cols_count = m_TreeView.append_column("Some percentage", *cell); 
  Gtk::TreeViewColumn* pColumn = m_TreeView.get_column(cols_count - 1); 
  if(pColumn) 
  { 
#ifdef GLIBMM_PROPERTIES_ENABLED 
    pColumn->add_attribute(cell->property_value(), m_Columns.m_col_percentage); 
#else 
    pColumn->add_attribute(*cell, "value", m_Columns.m_col_percentage); 
#endif 
  } 
 
  //Make all the columns reorderable: 
  //This is not necessary, but it's nice to show the feature. 
  //You can use TreeView::set_column_drag_function() to more 
  //finely control column drag and drop. 
  for(guint i = 0; i < 2; i++) 
  { 
    Gtk::TreeView::Column* pColumn = m_TreeView.get_column(i); 
    pColumn->set_reorderable(); 
  } 
 
  show_all_children(); 
} 
 
ExampleWindow::~ExampleWindow() 
{ 
} 
 
void ExampleWindow: n_button_quit() 
{ 
  hide(); 
} 
 
 
 
File: main.cc  
 
#include <gtkmm/main.h> 
#include "examplewindow.h" 
 
int main(int argc, char *argv[]) 
{ 
  Gtk::Main kit(argc, argv); 
 
  ExampleWindow window; 
  Gtk::Main::run(window); //Shows the window and returns when it is closed. 
 
  return 0; 
} |   
 
 
 
 |