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

use*_*501 0 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);

}
Run Code Online (Sandbox Code Playgroud)

我想添加 3 个标签,每个标签都在自己的框架内。(使用框架查看包装情况。)

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

我在文档和网络上搜索了解决方案,但没有找到。我想我只是不太明白包装是如何工作的。

如何让“”对象填充整个窗口,以便在窗口调整大小时框也会调整大小,并且框架会随着与框一起调整大小的网格调整大小。(标签大概不会调整大小。)

小智 5

这可能就是你要找的

一个例子是:

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);
}
Run Code Online (Sandbox Code Playgroud)