gtkmm3中的变更

gtkmm-3.0是gtkmm API的旧版本它依旧能与gtkmm-2.4和新的gtkmm-4.0 API并行安装。gtkmm-2.4 API的最新版本是gtkmm 2.24。gtkmm3于gtkmm2之间并没有重大的改变,但确实存在一些微小的变动,这些变动导致无法做到令他们保持二进制兼容。如果你从未用过gtkmm-2.4 API 则你可以放心的忽略本章。

gtkmm3库调用libgtkmm-3.0而不是libgtkmm-2.4 并将其的头文件安装于类似的目录下,所以你的pkg-config应该检索gtkmm-3.0而不是gtkmm-2.4

gtkmm3添加了一些新的类:

  1. Gtk::AppChooserGtk::AppChooserButton,Gtk::AppChooserDialog允许用户选择已安装的应用程序用以打开特定类型的内容。

  2. Gtk::Grid是一个新的容器部件他将在未来完全替换Gtk::BoxGtk::Table。它根据它的子项的属性而不是自身的布局属性对子项进行排列。

  3. Gtk::CheckButton相比Gtk::Switch更明确的显示开/关状态。例如,在允许用户激活硬件的时候,他可能很有用。

gtkmm3还对API进行了一些小的变更,在移植gtkmm-2.4的代码的时候你可能会遇到这些变更。这是一个简短的清单:

  1. Gtk::IconViewGtk::TreeView::ColumnGtk::ComboBox使用Gtk::CellLayout,现在有Gtk::CellArea可以用于指示CellRenderer的排列与对齐方式的详情。

  2. Gtk::ComboBox现在从CellLayout派生,从而使更容易对Gtk::CellRenderer进行布局与对齐。

  3. Gtk::AdjustmentGtk::IconSet类和Gdk::Cursor类现在通过Glib::RefPtr使用。

  4. Gtk::Box, Gtk::ButtonBox,Gtk::IconView, Gtk::Paned, Gtk::ProgressBar, Gtk::ScaleButton, Gtk::ScrollbarGtk::Separator现在从Gtk::Orientable派生,允许在不使用派生类(例如Gtk::HBox)的情况指定其方向(垂直或者水平)。

  5. Gtk::IconView, Gtk::TextView, Gtk::TreeView和其他部件派生自Scrollable而不使用他们自己的方法,例如get_vadjustment()拥有自己的set_scroll_adjustments信号。

  6. Gtk::StyleGtk::Rc已被删除,由Gtk::StyleContextGtk::StyleProvider替换,例如Gtk::CssProvider

  7. Widget::on_expose_event()被Widget::on_draw()取代,通过提供的Cairo::Context使用cairomm进行绘制,并且不需要你自己调用Cairo::Context::clip()

  8. ColorGdk::RGBA替代,添加alpha分量以支持透明度。Colormap与其笨拙的颜色分配方式一并被删除。

  9. Gdk::PixmapGdk::Bitmap现在被Gdk::Pixbuf所取代。

  10. Gdk::Drawable被删除,与其有关的方法被移动到了Gdk::Window

  11. 我们现在使用std::vector而不是使用中间类型(*Handle)以使API更加的清晰。

gtkmm 3.0中我们删除了所有弃用的API,尽管在gtkmm 3.x版本中出现了新的被弃用的API。

将源代码迁移到gtkmm-3.0的第一步,你应该通过定义GTKMM_DISABLE_DEPRECATED宏以检查你是否使用了在gtkmm-2.4中被弃用的API,然后删除他们。有一些autotools宏可以在编译时帮助你通过构建。访问gtkmm3移植Wiki了解更多详情。