前面文章介绍了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上运行,想办法中...