Доступ к измерениям дочернего виджета контейнера в конструкторе
Допустим, у меня есть класс с двумя 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::HBox
m_c1
чтобы получить ссылку на своего первого ребенка. Я тогда позвонил get_width()
а также get_height()
на этом ребенке. Идея состояла в том, чтобы накормить m_c2
Дочерние виджеты этих размеров. Проблема в том, что возвращаемая ссылка nullptr
,
Из некоторых постов, которые я прочитал, кажется, что мои виджеты еще не реализованы, и это объяснило бы мои трудности. Как я мог этого добиться?
1 ответ
Вы должны установить каждую кнопку в сетке, чтобы развернуть по горизонтали. Тогда все размеры позаботятся о себе.