dinglz 发表于 2021-11-13 11:19:37

[gtkmm] 01 gtkmm环境配置(Vs2019+vcpkg lastest)

既然是gtkmm,这个系列就是介绍c++使用gtk的。
为什么要使用gtk:一个优秀的跨平台gui解决方案

而gtkmm 是一个 GTK 的 C++ 封装,GTK+ 是一个用于创建图形用户界面的软件库。它使用 LGPL 协议,因此您可以使用 gtkmm 开发开放软件、自由软件,甚至商业非免费软件而不需支付任何版权费用。

gtkmm 曾经被称为 gtk--,那是因为 GTK+ 的名字中已经有了一个加号。但是,由于 -- 不容易被搜索引擎索引,所以项目名字就渐渐的变成了gtkmm,后来我们就一直使用这个名字。

static/image/hrline/2.gif


为什么使用gtkmm而不是使用gtk:gtkmm 允许你使用常用的 C++ 技术来撰写代码,比如封装、继承和多态。作为一个 C++ 程序员,你可能已经意识到这会让代码更加清晰、更加良好的管理代码。

gtkmm 更加类型安全,因此编译器可以检测出一些 C 只能在运行时才能检测出来的错误。这种使用特定类型的方法同样使得 API 更加清晰,因为你只需要通过看一下函数声明就可以知道应该使用什么类型了。

可以使用继承来衍生新的部件。在 GTK 中使用 C 代码来衍生新部件是非常复杂的,并且很容易出错,因此几乎没有 C 的程序员这么做。作为 C++ 开发人员,你知道继承是一个基本的面向对象技术。

可以使用成员实例,简化了内存管理。所有的 GTK 的 C 部件都是使用指针进行操作的。作为 C++ 程序员,你知道指针应当尽量避免使用。


static/image/hrline/2.gif

gtkmm 比 GTK 的代码更加简短,GTK 使用了大量带前缀的函数名以及大量的转型宏。
但是由于他的配置比较复杂,暂时先不介绍它的使用方法,转而来先讲它的配置。
这个教程里使用的是 windows x86 + Vs2019 +vcpkg
由于vcpkg端口映射的问题,导致gtk的使用需要配置繁多的附加目录。(已提交GitHub issues,期待修复 https://github.com/microsoft/vcpkg/issues/18760)

也就是说,首先你需要vcpkg install gtkmm
然后在你的vs2019项目中配置头文件目录。我下面给出这个目录
D:\vcpkg\installed\x86-windows\include\gtkmm-4.0;D:\vcpkg\installed\x86-windows\include\glibmm-2.68;D:\vcpkg\installed\x86-windows\lib\glibmm-2.68\include;D:\vcpkg\installed\x86-windows\include\glib-2.0;D:\vcpkg\installed\x86-windows\lib\glib-2.0\include;D:\vcpkg\installed\x86-windows\include\sigc++-3.0;D:\vcpkg\installed\x86-windows\lib\sigc++-3.0\include;D:\vcpkg\installed\x86-windows\include\giomm-2.68;D:\vcpkg\installed\x86-windows\lib\giomm-2.68\include;D:\vcpkg\installed\x86-windows\lib\gtkmm-4.0\include;D:\vcpkg\installed\x86-windows\include\pangomm-2.48;D:\vcpkg\installed\x86-windows\lib\pangomm-2.48\include;D:\vcpkg\installed\x86-windows\include\cairomm-1.16;D:\vcpkg\installed\x86-windows\lib\cairomm-1.16\include;D:\vcpkg\installed\x86-windows\include\cairo;D:\vcpkg\installed\x86-windows\include\gtk-4.0;D:\vcpkg\installed\x86-windows\include\pango-1.0;D:\vcpkg\installed\x86-windows\include\harfbuzz;D:\vcpkg\installed\x86-windows\include\gdk-pixbuf-2.0;D:\vcpkg\installed\x86-windows\include\graphene-1.0;D:\vcpkg\installed\x86-windows\lib\graphene-1.0\include;%(AdditionalIncludeDirectories)
请将D:\vcpkg替换成你的vcpkg安装目录,我用的是x86架构的gtkmm,如果你安装的是x64架构,请更改\x86-windows目录名称。
配置完成如图 :


以及将c++标准替换成c++17否则将报错(gtkmm的依赖库中使用了c++17的新式语法)



将官网上的例子复制一下
#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);
}

这是一个最简单的例子,下一个帖子我会讲解它每个语句的作用,并说明相关控件使用方法。

运行他,由于我使用的是非utf-8编码的vs2019,所以warning很多,忽略它,





运行结果如图。
下个帖子将介绍gtkmm的基础用法

dinglz 发表于 2021-11-13 11:22:39

刚刚测试了一下,编译出的exe在服务器系统上同样可以正常运行。
以及关于linux安装的说明:使用 apt-get install lib语法安装gtkmm,大部分linux自带gtkmm软件包
代码在linux-mac-windows均适用
页: [1]
查看完整版本: [gtkmm] 01 gtkmm环境配置(Vs2019+vcpkg lastest)