首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以在gtk4窗口上使用libvte终端小部件吗?

我们可以在gtk4窗口上使用libvte终端小部件吗?
EN

Stack Overflow用户
提问于 2022-04-24 18:20:41
回答 1查看 387关注 0票数 -1

我想在这个gtk4窗口上使用libvte。但在编译过程中面临的问题,演示脚本给出如下。有人能告诉我gtk4是否支持libvt-2.91吗?我在Ubuntu 22.04LTS上

代码语言:javascript
复制
$ gcc -Wall $(pkg-config --cflags gtk4 vte-2.91) gtk4App.c -o term $(pkg-config --libs gtk4 vte-2.91)

ERROR SHOW--------------
In file included from /usr/include/vte-2.91/vte/vte.h:33,
             from gtk4App.c:2: 
/usr/include/vte-2.91/vte/vtetypebuiltins.h:27:10: fatal error: vtetypebuiltins-gtk4.h: No such file or directory
   27 | #include "vtetypebuiltins-gtk4.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

这是gtk4脚本

代码语言:javascript
复制
#include <gtk/gtk.h>
#include <vte/vte.h>
//sudo apt install libgtk-4-dev libvte-2.91-dev  
//gcc -Wall $(pkg-config --cflags gtk4 vte-2.91) gtk4App.c -o term $(pkg-config --libs gtk4 vte-2.91)

static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *terminal;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  GtkWidget *grid = gtk_grid_new ();
  gtk_window_set_child ((GtkWindow    *)window, grid);
  gtk_widget_set_vexpand(grid, TRUE);
  gtk_widget_set_hexpand(grid, TRUE);

    GtkWidget *scrollview1;
    scrollview1 = gtk_scrolled_window_new();

    gtk_grid_attach(GTK_GRID(grid), scrollview1, 0, 0, 1, 1);

    terminal = vte_terminal_new();
    gtk_window_set_child ((GtkWindow    *)scrollview1, terminal);

  gtk_widget_show (window);
}

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

我知道libvte可以很好地使用gtk+3.0,但我想在gtk4上使用它。

EN

回答 1

Stack Overflow用户

发布于 2022-04-25 21:51:57

我确实让您的示例代码在我的Ubuntu22.04虚拟机上编译和执行。以下是我为实现这一目标所执行的步骤。

首先,我没有从包管理器中安装"libvte-2.91-dev“库,而是去了"vte”库(https://github.com/GNOME/vte)的Github存储库,并克隆了代码。在运行安装步骤中提到的meson和ninja构建命令之前,我修改了"meson_options.txt“文件,以支持构建对"GTK4”库的“GTK4”支持,将"value“属性从"false”更改为"true“。

代码语言:javascript
复制
option(
    'gtk4',
    type: 'boolean',
    value: true,
    description: 'Enable GTK+ 4.0 widget',
)

然后,我逐步了解了从Github存储库中注意到的构建方向。

代码语言:javascript
复制
cd vte
meson _build
ninja -C _build
sudo ninja -C _build install

我在“忍者-C _build安装”前面添加了"sudo“命令。否则,我相信系统仍然会提示输入密码。

执行了这些步骤之后,不仅已经建立了用于GTK3支持的"vte“库,而且还构建了用于GTK4支持的"vte”库。为了使程序执行可以看到库,我运行了"ldconfig“命令,它更新了库搜索路径。

代码语言:javascript
复制
sudo ldconfig

然后,我将示例代码复制到一个文本文件中,将其命名为"gtk4App.c“,然后运行"gcc”编译器,并对参数值进行以下修订。

代码语言:javascript
复制
gcc -Wall $(pkg-config --cflags gtk4 vte-2.91-gtk4) gtk4App.c -o term $(pkg-config --libs gtk4 vte-2.91-gtk4)

库“libvte-2.91-gtk 4”集与库“libvt-2.91”相邻。

在编译了示例程序之后,我启动了程序,并得到了一个示例终端。

最后要注意的是,当我运行meson命令时,有一个警告指出,GTK4支持是实验性的。所以请记住这一点。

我希望这能为你澄清一切。

致以问候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71991163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档