gpt4 book ai didi

c - Gtk+ 编程风格 : defining widgets

转载 作者:行者123 更新时间:2023-12-02 02:21:30 25 4
gpt4 key购买 nike

到目前为止,在我见过的几乎所有 GTK+ 示例代码中,GUI 的小部件都在 main 函数中定义。起初我采用了这个,但后来发现它非常不方便例如从单个回调函数操作多个小部件。当然我可以为此使用“数据”gpointer,但我不会必须首先将我想要操作的每个小部件包装在某种结构中将其作为“数据”参数传递?

无论如何,为了不受此约束,我刚开始定义主窗口之外的所有小部件功能,所以我可以轻松地跨所有功能访问它们。这种风格有什么缺点吗?

最佳答案

缺点与使用任何全局变量的缺点相同。 This page很好地概述了您不应该(以及何时应该)使用全局变量的情况。如果靠近底部,您会在“使用全局变量的真正糟糕理由”下看到:

I don't want to pass it around all the time.

恐怕您的反对听起来就是这样。但是,正如我链接到的页面也提到的那样,如果您只是编写简短的或一次性的程序,那么使用全局变量的便利性可能会超过缺点。

在中型程序中,通常的方法是创建一个结构并将其填充到 main() 中,然后将其传递给回调:

typedef struct {
GtkWidget *window, *button, *textfield;
} Widgets;

int main(int argc, char **argv) {
gtk_init(&argc, &argv);
Widgets *w = g_slice_new0(Widgets);
w->window = gtk_window_new(... etc...
...
g_signal_connect(w->button, "clicked", G_CALLBACK(on_clicked), w);
...etc...
gtk_main();
g_slice_free(Widgets, w);
return 0;
}

在大型程序中,更好的方法是创建您自己的表示主窗口、首选项对话框等的类,并将这些类传递给各种回调。

关于c - Gtk+ 编程风格 : defining widgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001897/

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