QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2505|回复: 2

请问gtkmm中treeview如何添加事件。

[复制链接]
发表于 2007-3-13 14:54:23 | 显示全部楼层 |阅读模式
请问gtkmm中treeview如何添加事件。
我从数据库中读取数据:
while(没有读完)
{
     .........
      向treeview中添加数据。
      想在这里给treeView添加事件 事件起因是 select_row。(gtk下是这个)
      我就是想  在单击某一行数据时 打出个新窗口,并把 这一行的数据 如: 1    张三   男   河北 传给打开的窗口。
     .........
}
发表于 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;
}
回复

使用道具 举报

发表于 2007-4-2 18:10:53 | 显示全部楼层
treeview->get_selection()->signal_changed().connect(sigc::mem_fun(*this,&Youclass:selectionChangedCallBack));
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-25 09:30 , Processed in 0.054310 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表