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

问题描述 投票:0回答:1

我是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个框架填充它,每个框架都带有标签。但是,网格没有扩展以填充窗口。所以我尝试将网格放在一个盒子里,但是盒子也没有扩展以填充窗口。

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

如何让“box”对象填满整个窗口,这样当窗口调整大小时,框也会调整大小,框架会根据框格调整大小。 (标签大概不会调整大小。)

c++ gtk gtkmm
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.