You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:30:05