由于学校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。
界面美观
不多做解释,直接放图。
因为这个库有点冷门,所以我打算持续分享我的学习历程,以供大家学习。所以这个连载文章周期可能会很长,如有错误,敬请在评论区指正,谢谢!
安装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.
安装完成后我们打开图中框选的程序。
这会打开一个类似于命令行的窗口,如图:
这时我们可以运行以下几个命令来安装所有需要的包:
pacman -S mingw-w64-ucrt-x86_64-gtk4
pacman -S mingw-w64-ucrt-x86_64-toolchain base-devel
执行第二个命令时会出现选择,我们直接回车就好了(默认all)
安装完成后我们打开MSYS2安装目录,将ucrt64
目录下的bin
,include
,lib
文件夹以及usr
目录下的bin
文件夹添加到系统环境变量的Path中:
在CLion中配置GTK
首先将构建、执行、部署
-> 工具链
下MinGW
的工具集
路径改为MSYS的ucrt64路径,如图:
接下来在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})
如图:
并重新加载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);
}
没错,就可以运行了。
本期就写到这里(时间不早了(悲)),下一期我将会讲讲这个代码的详解以及窗体美化方案。敬请期待~
评论