Gtkmm ListStore,如何在其中一行中捕获该值被更改?

时间:2017-09-28 19:44:51

标签: c++ gtk gtkmm

当表格中的某些值发生变化时,我需要重新绘制图像。我想知道如何捕获表中值的变化。 我找到了signal_row_changed,但它给了const Gtk :: TreeModel :: Path&和const Gdk :: TreeModel :: iterator&。 当我做这样的事情时:

...
void PrMainWindow::redraw(){...}
...
nRefTree->signal_row_changed().connect
    (sigc::mem_fun(*this,
                  &PrMainWindow::redraw));

其中nRefTree - Glib :: Refptr,编译器给我错误。 但是,如果我这样做

void PrMainWindow::redraw(
    const Gtk::TreeModel::Path& path,
    const Gtk::TreeModel::iterator& iter)
{...}

比它的工作,但我不需要这些参考,因为这个功能可以从其他地方调用,没有这些参数。

也许还有一些其他信号用于切割无用参数的方法或方法?求助。

1 个答案:

答案 0 :(得分:0)

最简单的方法是从连接信号中调用重绘乐趣:

nRefTree->signal_row_changed().connect(sigc::mem_fun(*this, &PrMainWindow::MyChangedSignal));

void PrMainWindow::MyChangedSignal(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter)
{
    ...
    redraw();
}

所以redraw()也可以从其他地方调用。

我能想象到的(未经测试)的方法是:

  • 使用gobj()获取基础GtkListStore*
  • GtkListStore实现了GtkTreeModel,因此所有方法都可用。

我想假设你可以将你的回调连接到GtkTreeModel' "行改变"信号。这个回调使用指针而不是引用,因此可以从没有参数的其他地方调用它。