如何获取Gtk::Grid的行数与列数?
获取Gtk::Grid的行数与列数
Gtk::Grid确实没有直接提供获取行数、列数的成员函数,你可以通过以下两种方式实现:
方法一:遍历子控件计算最大范围
通过遍历Grid内所有子控件,利用query_child()方法获取每个控件的位置与跨度,计算出最大的行、列结束索引,最终得到总行数和列数(索引从0开始,所以最大值加1即为总数)。
C++ 代码示例
#include <gtkmm/grid.h> int get_grid_total_rows(Gtk::Grid& grid) { int max_end_row = -1; const auto children = grid.get_children(); for (const auto child : children) { int row, col, row_span, col_span; grid.query_child(child, row, col, row_span, col_span); const int current_end_row = row + row_span; if (current_end_row > max_end_row) { max_end_row = current_end_row; } } return max_end_row + 1; // 空Grid返回0 } int get_grid_total_cols(Gtk::Grid& grid) { int max_end_col = -1; const auto children = grid.get_children(); for (const auto child : children) { int row, col, row_span, col_span; grid.query_child(child, row, col, row_span, col_span); const int current_end_col = col + col_span; if (current_end_col > max_end_col) { max_end_col = current_end_col; } } return max_end_col + 1; // 空Grid返回0 }
方法二:直接访问GtkGrid的GObject属性
由于Gtk::Grid是对C语言GtkGrid的封装,你可以通过GObject的属性接口获取内部维护的行数和列数:
C++ 代码示例
#include <gtkmm/grid.h> #include <glib-object.h> int get_grid_rows_via_property(Gtk::Grid& grid) { int rows = 0; g_object_get(G_OBJECT(grid.gobj()), "rows", &rows, nullptr); return rows; } int get_grid_cols_via_property(Gtk::Grid& grid) { int cols = 0; g_object_get(G_OBJECT(grid.gobj()), "columns", &cols, nullptr); return cols; }
注意:这种方法依赖GtkGrid内部的属性实现,虽然在当前版本的GTK中可用,但如果未来GTK修改内部属性名,可能会失效。相比之下,遍历子控件的方法更稳定通用。
内容的提问来源于stack exchange,提问作者user4829254
相关产品推荐
相关产品推荐

