gpt4 book ai didi

c - GTK+ 中基于模板的 UI 的优点是什么

转载 作者:行者123 更新时间:2023-12-04 17:46:03 24 4
gpt4 key购买 nike

在 GTK+ 应用程序中使用基于"template"的方法是否有优势?我正在制作我的第一个 GTK+ 应用程序,我在互联网上发现创建 GTK+ 应用程序有很多变体,一些看起来较旧的方法,一些较新的方法,我查看了 GTK+ 开发指南,它使用了一个看起来很复杂的"template"与子分类等见:https://developer.gnome.org/gtk3/stable/ch01s04.html

我的问题是我可以用我的方法来做还是应该使用模板/子类化?

我的方式:

<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkApplicationWindow" id="window">
...

#include <gtk/gtk.h>

static void activate (GtkApplication* app, gpointer user_data) {
GtkBuilder *builder = gtk_builder_new_from_file ("gui.glade");
GtkWidget *window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_builder_connect_signals (builder, NULL);
gtk_widget_show_all (window);
gtk_main ();
}

int main (int argc, char *argv[]) {
GtkApplication *app = gtk_application_new ("a.b.c", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
int status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}

对比"template"方式:

<interface>
<requires lib="gtk+" version="3.20"/>
<template class="ExampleAppWindow" parent="GtkApplicationWindow">
...

#include <gtk/gtk.h>

#include "exampleapp.h"
#include "exampleappwin.h"

struct _ExampleApp
{
GtkApplication parent;
};

G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);

static void
example_app_init (ExampleApp *app)
{
}

static void
example_app_activate (GApplication *app)
{
ExampleAppWindow *win;

win = example_app_window_new (EXAMPLE_APP (app));
gtk_window_present (GTK_WINDOW (win));
}

static void
example_app_open (GApplication *app,
GFile **files,
gint n_files,
const gchar *hint)
{
GList *windows;
ExampleAppWindow *win;
int i;
...

最佳答案

据我了解,不同之处在于模板+子类可以很容易地重用。按照您的方式™,您将不得不使用多个 GtkBuilder 对象,并且在 XML 中定义信号时仍然会遇到问题。

因此,例如,如果您有一个在代码中的 N 个不同位置使用的对话框,那么您应该使用模板。

此外,例如,如果您希望拥有主窗口的 N 个副本,其中 N 由用户交互定义,您的方式™几乎是不可能的。

关于c - GTK+ 中基于模板的 UI 的优点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com