由于学校C语言大作业要求,让我开始搜寻C语言图形库,这期间包括openGL,easyX,graphics 等,在层层筛选后我选择了一个相对(很)冷门的图形库———GTK。选择它的原因有以下几点:

  • 代码简洁。

从官方给出的示例来看:

#include <gtk/gtk.h>

static void on_activate (GtkApplication *app) {

  // Create a new window

  GtkWidget *window = gtk_application_window_new (app);

  // Create a new button

  GtkWidget *button = gtk_button_new_with_label ("Hello, World!");

  // When the button is clicked, close the window passed as an argument

  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);

  gtk_window_set_child (GTK_WINDOW (window), button);

  gtk_window_present (GTK_WINDOW (window));

  }

  int main (int argc, char *argv[]) {

  // Create a new application

  GtkApplication *app = gtk_application_new ("com.example.GtkApplication",G_APPLICATION_FLAGS_NONE);

  g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL);

  return g_application_run (G_APPLICATION (app), argc, argv);

  }

确实比较简洁地写出了一个窗体(相较于WindowsAPI)。

  • 有完善的控件

这也是选择它的重要原因,像openGL这种虽然也能很容易的写窗体,但是本身没有对控件的支持,所以out。

  • 界面美观

不多做解释,直接放图。

52840_0hcn_6694.png

因为这个库有点冷门,所以我打算持续分享我的学习历程,以供大家学习。所以这个连载文章周期可能会很长,如有错误,敬请在评论区指正,谢谢!

安装GTK4

首先根据官方文档,我们安装MSYS2这个软件(貌似需要VPN才能访问,或者使用我的web VPN下载),官方介绍是:

此方法基于由MSYS2提供的包,它为 Windows 提供了一个类似 UNIX 的环境。这两个仓库还提供了大量其他有用开源库的包。

This method is based on the packages provided by MSYS2, which provides a UNIX-like environment for Windows. Both of these repositories also provide packages for a large number of other useful open source libraries.

安装完成后我们打开图中框选的程序。

53504_j2pk_5946.png

这会打开一个类似于命令行的窗口,如图:

53562_krsb_6716.png

这时我们可以运行以下几个命令来安装所有需要的包:

pacman -S mingw-w64-ucrt-x86_64-gtk4
pacman -S mingw-w64-ucrt-x86_64-toolchain base-devel

执行第二个命令时会出现选择,我们直接回车就好了(默认all)

安装完成后我们打开MSYS2安装目录,将ucrt64目录下的binincludelib文件夹以及usr目录下的bin文件夹添加到系统环境变量的Path中:

53823_ocna_7633.png

在CLion中配置GTK

首先将构建、执行、部署 -> 工具链MinGW工具集路径改为MSYS的ucrt64路径,如图:

53981_pxfs_4053.png

接下来在CMakelist.txt后加上(请将test改为你的项目名)

find_package(PkgConfig REQUIRED)

pkg_check_modules(GTK4 REQUIRED gtk4)

include_directories(${GTK4_INCLUDE_DIRS})

link_directories(${GTK4_LIBRARY_DIRS})

target_link_libraries(test ${GTK4_LIBRARIES})

如图:

54521_btmv_9906.png

并重新加载CMake。

现在,配置已经完成了,我们尝试编写一下代码(官方示例):

#include <gtk/gtk.h>

static void on_activate (GtkApplication *app) {

  // Create a new window

  GtkWidget *window = gtk_application_window_new (app);

  // Create a new button

  GtkWidget *button = gtk_button_new_with_label ("Hello, World!");

  // When the button is clicked, close the window passed as an argument

  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);

  gtk_window_set_child (GTK_WINDOW (window), button);

  gtk_window_present (GTK_WINDOW (window));

  }

  int main (int argc, char *argv[]) {

  // Create a new application

  GtkApplication *app = gtk_application_new ("com.example.GtkApplication",

                                             G_APPLICATION_FLAGS_NONE);

  g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL);

  return g_application_run (G_APPLICATION (app), argc, argv);

  }

没错,就可以运行了。

54123_5rfg_6948.png

本期就写到这里(时间不早了(悲)),下一期我将会讲讲这个代码的详解以及窗体美化方案。敬请期待~

下一篇(GTK4示例代码解析以及美化方案)->