在构造函数中访问容器子窗口小部件维度

时间:2018-01-27 16:07:03

标签: c++ gtk gtkmm

假设我有一个有两个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中的子窗口小部件的大小相同,以确保两个容器之间的视觉一致性。否则,它看起来像这样:

Inconsistent sizes

为了确保,我不希望m_c1成为Gtk::Grid

以下是我到目前为止所尝试的内容:我使用了get_child_at() Gtk::HBox提供的m_c1方法来获取对其第一个孩子的引用。然后我打电话给那个孩子get_width()get_height()。我们的想法是为这些维度提供m_c2的子小部件。问题是返回的引用是nullptr

从我读过的一些帖子来看,似乎我的小部件可能尚未实现,这可以解释我的困难。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要将网格中的每个按钮设置为expand horizontally。然后所有的尺寸都会照顾好自己。