部件

gtkmm 应用程序由一系列包含了如按钮、文本框之类部件的窗口构成。在一些其它的系统上,部件可能被称为“控件”。对于你的应用程序窗口中的每个部件,在你的代码里就会有一个对应的 C++ 对象。所以当你想控制部件行为的时候,只需要调用这个部件对象的相应方法即可。

部件被安置在褚如 frame、notebook 这样的容器部件中,以一种部件包含部件的层次结构的形式。其中一些容器部件,像 Gtk::Grid 这样的容器部件是不可见的,它们只是被用来安置其它部件的。这里有一些示例代码,将两个 Gtk::Button 部件放到一个 Box 容器部件中:

m_box.append(m_Button1);
m_box.append(m_Button2);
接下来是如何把这个包含两个按钮的 Gtk::Box 添加到一个 Gtk::Frame 中,它包含一个可视的边框和标题:
m_frame.set_child(m_box);

本书中的大部分章节都是讲解特定的部件。要得到更多关于添加部件到容器部件的信息,请看 容器部件 这一章。

尽管你可以使用 C++ 代码来指定窗口和部件的外观和布局,但你可能会发现使用 Glade 来设计你的界面,并且使用 Gtk::Builder 在运行时动态加载界面是更方便。请参考 Glade 与 Gtk::Builder 这一章。

尽管 gtkmm 部件实例拥有像其它 C++ 类那样的生存时间和作用域,gtkmm 还是有一些可选的节省时间的特性,接下来你会在接下来的一些例子中看到。Gtk::make_managed() 允许你创建一个新的部件并声明该部件由放置它的容器部件所拥有。这将允许你创建部件然后将其添加到容器中,而不必承担记住删除它的心智负担,因为当它的父容器被删除时它将被一并删除。如果你需要了解更多关于 gtkmm 内存管理技术的话,请看 内存管理 章节。