前面文章介绍了GTK和Qt联合开发。
到了APP层,肯定是C++更合适,不用写那么多代码啊。
所以有了官方的GTKMM,即C++绑定。
然后界面设计从glade延伸到了Cambalache,这些都是官方文档,还有C++例子:
https://gtkmm.gnome.org/en/index.html
https://gitlab.gnome.org/GNOME/gtkmm-documentation/-/tree/master/examples
然后很多库都以mm为名称,链接后,代码就简洁多了:
# 跟stringsorter.h的枚举定义冲突 DEFINES -= UNICODE SRCDIR = $$PWD/../GTK4_Gvsbuild_2024.12.0_x64 LIBDIR = $${SRCDIR}/lib LIBS += \ $${LIBDIR}/gio-2.0.lib \ $${LIBDIR}/cairo.lib \ $${LIBDIR}/gdk_pixbuf-2.0.lib \ $${LIBDIR}/glib-2.0.lib \ $${LIBDIR}/gtk-4.lib \ $${LIBDIR}/harfbuzz.lib \ $${LIBDIR}/pango-1.0.lib \ $${LIBDIR}/graphene-1.0.lib \ $${LIBDIR}/gobject-2.0.lib \ $${LIBDIR}/gtkmm-vc143-4.0.lib \ $${LIBDIR}/sigc-3.0.lib \ $${LIBDIR}/glibmm-vc143-2.68.lib \ $${LIBDIR}/giomm-vc143-2.68.lib \ INCDIR = $${SRCDIR}/include INCLUDEPATH += \ $${INCDIR}/gtk-4.0 \ $${INCDIR}/glib-2.0 \ $${LIBDIR}/glib-2.0/include \ $${LIBDIR}/pangomm-2.48/include \ $${INCDIR}/cairomm-1.16 \ $${LIBDIR}/cairomm-1.16/include \ $${INCDIR}/cairo \ $${INCDIR}/freetype2 \ $${INCDIR}/pango-1.0 \ $${INCDIR}/harfbuzz \ $${INCDIR}/gdk-pixbuf-2.0 \ $${INCDIR}/pangomm-2.48 \ $${INCDIR}/graphene-1.0 \ $${LIBDIR}/graphene-1.0/include \ $${LIBDIR}/gtkmm-4.0/include \ $${INCDIR}/gtkmm-4.0 \ $${INCDIR}/glibmm-2.68 \ $${INCDIR}/giomm-2.68 \ $${LIBDIR}/giomm-2.68/include \ $${LIBDIR}/glibmm-2.68/include \ $${INCDIR}/sigc++-3.0 \ $${LIBDIR}/sigc++-3.0/include \
#include <gtkmm.h> class MyWindow : public Gtk::Window { public: MyWindow(); }; MyWindow::MyWindow() { set_title("Basic application"); set_default_size(200, 200); } int main(int argc, char* argv[]) { auto app = Gtk::Application::create("org.gtkmm.examples.base"); return app->make_window_and_run<MyWindow>(argc, argv); }
截图:
目前界面cambalache还不能在win上运行,想办法中...