从gtk-gtkmm,c++的选定行中获取数据
Get data from selected row of gtk gtkmm, c++
我有一个GTK应用程序,它有一个带有treeview
和按钮的窗口。单击按钮时,我需要从treeview
中所选行的第一列(也是唯一一列)获取数据。
这是列的类:
class ModelColumns:
public Gtk::TreeModel::ColumnRecord{
public:
ModelColumns(){ add(m_port_name); }
Gtk::TreeModelColumn<Glib::ustring> m_port_name;
};
这与这里的示例类似,但只有一列:http://www.lugod.org/presentations/gtkmm/treeview.html
这是目前的按钮点击信号处理程序:
tvPorts
是treeview
小部件
tvPortsList
是treeview
的listStore
static
void on_btnPortSelectOK_clicked (){
Glib::RefPtr<Gtk::TreeSelection> selection = tvPorts->get_selection();
Gtk::TreeModel::iterator selectedRow = selection->get_selected();
//Now what?
//Need to get data from selected row to display it.
}
我搜索了文档和许多示例,试图找出下一步该做什么,但找不到任何gtkmm的示例,我只能找到c或python实现的示例。
据我所知,我需要从我的iterator
(selectedRow
)中获得一个TreeRow
对象。我该怎么做?
谢谢。
更新:
我现在正在使用这个代码,它几乎可以工作。唯一的问题是它打印上一个选择。我第一次选择某个东西,然后按下按钮,它只打印一行新行。第二次打印第一次选择的内容,第三次打印第二次,等等。
Glib::RefPtr<Gtk::TreeSelection> selection = tvPorts->get_selection();
Gtk::TreeModel::iterator selectedRow = selection->get_selected();
Gtk::TreeModel::Row row = *selectedRow;
Glib::ustring port = row.get_value(m_Columns.m_port_name);
printf("nselected port: %s", port.data());
这似乎很奇怪。(m_Columns
是ModelColumns
类的实例)
更新2:
通过添加fflush(stdout);
修复了问题现在一切都好了,谢谢。
文档说只需取消引用iter即可获得TreeRow:
Gtk::TreeModel::Row row = *iter; // 'iter' being your 'selectedRow'
std::cout<<row[0];
相关文章:
- C++ - 忽略并从其他文件获取数据
- 如何从网站获取数据并将其传输到数据库?
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 如何从 CSV 获取数据并将其存储在 C++ 中的表对象中
- 获取 R 数据帧的内存地址
- C++ 如何从虚拟类的模板化子类中获取数据?
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 连接到远程存储库并获取数据
- 使用WiFi.h从WiFiClient ESP32获取数据
- CSV文件未从缓冲区获取数据
- C++从双指针获取数据
- C++ 从文件中获取数据时使用 strcpy 和 strcmp 按字母顺序对数组进行排序?
- 使用 Recvfrom 获取数据
- C 编程:在循环时运行 2 并从 loop1 获取数据的随机结果
- 复制构造函数并从方法中获取数据
- 如何在运行时从平面缓冲区获取数据值和数据类型
- 在C J2ME中读取Excel文件,并从ITQ获取数据
- 如何通过NodeMCU从Web获取数据
- 获取数据QFUTUREWATCHER
- 从文件中获取数据时如何放置换行符?