请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

进一步学习gtk 面向对象的疑惑

看gtk的文档时(gtk3没看到getting started 所以看的4 应该差不多吧?)

前面的例子看过视频都很容易理解, 但是看到build app, 好像突然换到了面向对象的方法

视频里谈到面向对象时 我以为主要是理解源码时用到, 一般简单了解到各个组件之间的继承关系就可以,包括后面几节项目也没有用到定义自己的类实现面向对象

好了,有关面向对象设计理念的内容呢,我也不打算过多深入探讨了,一般的 C 语言教程
也不会涉及这些内容。我们安排这一节的目的就是希望让大家在阅读 GTK 和 glib 的源码
时更容易搞清楚这些类型定义的作用和目的,如果大家对于面向对象产生了兴趣,经过 C
语言的学习,相信大家现在也具备了学习 C++ 或者 Java 这样的面向对象的语言的基础。

但是文档里仅仅是start就在自己实现类 面向对象?

#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) { }
static void example_app_open (GApplication  *app, GFile **files, int n_files, const char *hint) { }
static void example_app_class_init (ExampleAppClass *class) { }

ExampleApp * example_app_new (void) { }

什么情况下要用视频里的方式,什么时候应该自己去自定义类和方法呢

老师可以再给些进一步学习gtk的建议吗


比如 gtk4 getting started - build app 的第一个例子 不解释的给个头文件 就感觉理解起来不容易。。

#ifndef __EXAMPLEAPP_H
#define __EXAMPLEAPP_H

#include <gtk/gtk.h>

#define EXAMPLE_APP_TYPE (example_app_get_type())
G_DECLARE_FINAL_TYPE(ExampleApp, example_app, EXAMPLE, APP, GtkApplication)
ExampleApp *example_app_new(void);

#endif /* __EXAMPLEAPP_H */

正在回答 回答被采纳积分+3

1回答

bennyhuo 2021-08-08 21:41:11

GTK 当中确实用到了很多面向对象的概念,我在课程当中引入对 GTK 的介绍,一方面是为了想大家介绍 C 语言在 GUI 编程方面的一些延申,另一方面也是想介绍一些相关的思想。

GTK4 的例子当中提到的那些东西其实你自己探索一下,是完全有机会理解并搞懂的,能否做到这一点取决于同学对于前面 C 语言基础的掌握程度以及对面向对象概念的理解。

对于面向对象的概念的理解,我讲的并不多,但已经非常充分了。整个互联网上讲 C 语言面向对象的资料都非常少的,因为 C 语言原生不支持面向对象。如果想要对面向对象有深入的认识,建议学习一门支持面向对象的语言,C++、Java、Python 都是可以的。

回到你的问题上

怎么实现 GTK 的进阶?

我不清楚得你具体目的是什么。

如果你想要做 GUI 开发,我不建议你用 GTK,课程里面我们也是这么说的,我给大家介绍了很多流行的 GUI 框架,包括 Qt,Electron 等等。如果你一定要用 GTK,你可以学 Python,GTK 为 Python 提供了相应的封装,使用起来更加方便。

如果你想要深入学习 C 语言,GTK 同样不是一个很值得深入的方向,多数企业对于 C 语言的需求都是处理音视频、网络底层框架、操作系统相关的开发、驱动移植等。

什么情况下要用视频里的方式,什么时候应该自己去自定义类和方法呢

C 语言当中主流的写法就是过程式的写法,GTK 当中强行引入面向对象,其实也是为了方便组织大型项目的代码而已。引入面向对象还有个好处就是可以方便地为 C++、Python 这样的语言提供面向对象的 API。

所以如果你只是想像个小工具,视频当中的方式足够了。如果你想要写个大型项目,定义类的方式可能会更好,但我还是建议你换个技术方案吧,用 Electron 或者 Qt 开发会更方便。

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_慕工程65285 #1
    谢谢老师 可以理解到大部分时候不适合选择c语言+gtk , 但正巧有https://github.com/pwmt/zathura 是一个用c+gtk写的阅读器我比较感兴趣...
    回复 有任何疑惑可以回复我~ 2021-08-08 22:00:03
  • bennyhuo 回复 提问者 qq_慕工程65285 #2
    那就仔细研究一下吧,里面涉及的语法其实基本上咱们都学过了,不要怕
    回复 有任何疑惑可以回复我~ 2021-08-08 22:56:19
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信