Доступ к измерениям дочернего виджета контейнера в конструкторе

Допустим, у меня есть класс с двумя Gtk::Containers вот так:

class Example : public Gtk::VBox
{
public:
    Example();
    virtual ~Example();

private:
    Gtk::HBox m_c1; // First container
    Gtk::Grid m_c2; // Second container
};

Построение Example реализован так:

Example::Example()
{
    const int nbRows{6};
    const int nbColumns{7};

    for(int col{0}; col < nbColumns; ++col)
    {
        Gtk::Button* btn {new Gtk::Button("A")};

        m_c1.pack_start(*btn);
    }

    for(int row{0}; row < nbRows; ++row)
    {
        for(int col{0}; col < nbColumns; ++col)
        {
            Gtk::Button* btn {new Gtk::Button("A")};

            m_c2.attach(*btn, col, row, 1, 1);
        }
    }

    // Layout setup:
    pack_start(m_c1);
    pack_start(m_c2);

    show_all();
}

Что я хочу сделать, это убедиться, что дочерние виджеты в m_c2 имеют тот же размер, что и дочерний виджет в m_c1, чтобы обеспечить визуальную согласованность между двумя контейнерами. В противном случае это выглядит так:

Несоответствующие размеры

Просто чтобы убедиться, я не хочу m_c1 быть сделанным Gtk::Grid,

Вот что я пробовал до сих пор: я использовал get_child_at() метод доступен из Gtk::HBoxm_c1 чтобы получить ссылку на своего первого ребенка. Я тогда позвонил get_width() а также get_height() на этом ребенке. Идея состояла в том, чтобы накормить m_c2Дочерние виджеты этих размеров. Проблема в том, что возвращаемая ссылка nullptr,

Из некоторых постов, которые я прочитал, кажется, что мои виджеты еще не реализованы, и это объяснило бы мои трудности. Как я мог этого добиться?

1 ответ

Решение

Вы должны установить каждую кнопку в сетке, чтобы развернуть по горизонтали. Тогда все размеры позаботятся о себе.

Другие вопросы по тегам