Gtkmm ListStore,如何在其中一行中捕获该值已更改?
Posted
技术标签:
【中文标题】Gtkmm ListStore,如何在其中一行中捕获该值已更改?【英文标题】:Gtkmm ListStore, how to catch that value in one of the rows was changed? 【发布时间】:2017-09-28 19:44:50 【问题描述】:当表格中的某些值发生变化时,我需要重绘图像。我想知道如何捕捉表中值的变化。 我找到了 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】:最简单的方法是从连接的信号 fun 中调用 redraw:
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 的“行更改”信号。这个回调使用的是指针而不是引用,所以可以从其他地方不带参数地调用它。
【讨论】:
看起来……很奇怪,但我认为,它会起作用的。谢谢!以上是关于Gtkmm ListStore,如何在其中一行中捕获该值已更改?的主要内容,如果未能解决你的问题,请参考以下文章