gtkmm - 如何使包含小部件的框展开以填充窗口?

时间:2018-03-03 20:13:52

标签: c++ gtk gtkmm

我是gtkmm的新手,我对打包以及如何扩展小部件感到有些困惑。

这是我写的代码:

#include <gtkmm.h>

class GUIWindow : public Gtk::Window
{

    public:

    GUIWindow()
    {
        set_title("title");
        set_border_width(10);
        set_size_request(800, 600);

        add(_box_);

        _box_.pack_start(_grid_, true, true, 10);

        _grid_.add(_frame1_);
        _grid_.add(_frame2_);
        _grid_.attach_next_to(_frame3_, _frame1_, Gtk::POS_BOTTOM, 2, 1);

        _frame1_.set_label("f1");
        _frame2_.set_label("f2");
        _frame3_.set_label("f3");


        _label1_.set_text("Hello world");
        _label2_.set_text("this is an example GUI");
        _label3_.set_text("some example text");

        _frame1_.add(_label1_);
        _frame2_.add(_label2_);
        _frame3_.add(_label3_);

        show_all_children();

    }

    private:

    Gtk::Box _box_;

    Gtk::Grid _grid_;
    Gtk::Frame _frame1_;
    Gtk::Frame _frame2_;
    Gtk::Frame _frame3_;

    Gtk::Label _label1_;
    Gtk::Label _label2_;
    Gtk::Label _label3_;

};

int main(int argc, char *argv[])
{

    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.examples.base");

    GUIWindow guiwindow;
    return app->run(guiwindow);

}

我想在自己的框架中添加3个标签。 (使用框架查看包装的内容。)

我最初在我的窗口添加了一个网格,并用3个框架填充它,每个框架都带有标签。但是,网格没有扩展以填充窗口。所以我尝试将网格放在一个盒子里,但是盒子也没有展开以填充窗口。

我已经在文档和网页上搜索了解决方案,但没有找到解决方案。我想我还不太了解包装是如何运作的。

如何获得&#34; &#34;对象填充整个窗口,这样当窗口调整大小时,框也会调整大小,并且框架会随着框格调整大小。 (标签大概不会调整大小。)

1 个答案:

答案 0 :(得分:4)

这可能就是你要找的东西

一个例子是:

for (const auto &child : _grid_.get_children()) {
    child->set_hexpand(true);
    child->set_halign(Gtk::ALIGN_FILL);
    child->set_vexpand(true);
    child->set_valign(Gtk::ALIGN_FILL);
}