如何在C语言中的GTK3中创建自定义小部件?

教s

您知道如何在GTK 3中创建自定义窗口小部件吗?我试图用C继承GtkDrawingArea几个小时。Gnome.org仅提供有关如何继承G_OBJECT的简要教程。我的问题是G_Object/GTK无法在将with强制转换时将我的自定义StrokerNodalContainer视为子类,即使我的定义很难包含这样的行:GtkWidgetGTK_WIDGETstruct

GtkDrawingArea parent_instance;

它说 :

invalid cast from 'StrokerNodalContainer' to 'GtkWidget'

如果您怀疑还有其他问题,请参见以下完整代码。它很小,所以我看不到任何外部代码混乱的原因。

笔者节点容器

#ifndef __STROKER_NODALCONTAINER_H__
#define __STROKER_NODALCONTAINER_H__

#ifndef NO_INCLUDE_WITHIN_HEADERS
#include <gtk/gtk.h>
#endif

#define STROKER_TYPE_NODAL_CONTAINER                  (stroker_nodal_container_get_type ())
#define STROKER_NODAL_CONTAINER(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), STROKER_TYPE_NODAL_CONTAINER, StrokerNodalContainer))
#define STROKER_NODAL_CONTAINER_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST  ((klass), STROKER_TYPE_NODAL_CONTAINER, StrokerNodalContainerClass))
#define STROKER_IS_NODAL_CONTAINER(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), STROKER_TYPE_NODAL_CONTAINER))
#define STROKER_IS_NODAL_CONTAINER_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE  ((klass), STROKER_TYPE_NODAL_CONTAINER))
#define STROKER_NODAL_CONTAINER_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS  ((obj), STROKER_TYPE_NODAL_CONTAINER, StrokerNodalContainerClass))

typedef struct _StrokerNodalContainer      StrokerNodalContainer;
typedef struct _StrokerNodalContainerClass StrokerNodalContainerClass;

struct _StrokerNodalContainer
{
    GtkDrawingArea parent_instance;
};

struct _StrokerNodalContainerClass
{
    GtkDrawingAreaClass parent_class;
};

GType stroker_nodal_container_get_type(void);

//StrokerNodalContainer* stroker_nodalcontainer_new(void);

#endif /* __STROKER_NODALCONTAINER_H__ */

笔者节点容器

#include <gtk/gtk.h>
#include "stroker-nodalcontainer.h"

G_DEFINE_TYPE( StrokerNodalContainer, stroker_nodal_container, G_TYPE_OBJECT )

static void stroker_nodal_container_class_init( StrokerNodalContainerClass* klass )
    {}

static void stroker_nodal_container_init( StrokerNodalContainer* self )
{
    GdkRGBA c;
    GtkWidget *widget;

    gdk_rgba_parse(&c, "blue");
    widget = GTK_WIDGET(self);

    gtk_widget_override_background_color( widget, GTK_STATE_FLAG_NORMAL, &c );
}

main.c

#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <cairo/cairo.h>

#include "stroker-nodalcontainer.h"

int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *nodalWidget;

    gtk_init( &argc, &argv );

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (window), "Stroker");
    g_signal_connect( window, "destroy", G_CALLBACK (gtk_main_quit), NULL );
    gtk_container_set_border_width( GTK_CONTAINER(window), 10 );
    gtk_widget_show (window);

    nodalWidget = g_object_new(STROKER_TYPE_NODAL_CONTAINER,NULL);
    gtk_container_add( GTK_CONTAINER(window), nodalWidget );
    gtk_widget_show (nodalWidget);

    gtk_main();


    return EXIT_SUCCESS;
}

感谢您的任何帮助 !

朱西·库科宁

该错误消息可能是由于以下原因:

G_DEFINE_TYPE( StrokerNodalContainer, stroker_nodal_container, G_TYPE_OBJECT )

如果查看G_DEFINE_TYPE()文档,您会看到第三个参数应该是父类型:您可能需要GTK_TYPE_DRAWING_AREA在此处。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在gtk3中将特定的CSS类设置为小部件?(C)

来自分类Dev

如何在应用小部件中创建类似于Google Play音乐小部件中的自定义视图?

来自分类Dev

如何在自定义小部件中显示QChartView?

来自分类Dev

如何在 Flutter 中自定义 Slider 小部件?

来自分类Dev

如何在GTK3中添加VTE终端窗口小部件?

来自分类Dev

如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

来自分类Dev

如何在自定义函数中创建动态窗口小部件并在viewDidLoad中调用它们?

来自分类Dev

cakephp 3.x 创建自定义小部件

来自分类Dev

在Wordpress中创建自定义小部件

来自分类Dev

如何在python 3.4中使用Gtk3在背景图像上插入小部件?

来自分类Dev

如何在Xamarin小部件中使用自定义行创建ListView

来自分类Dev

SAP HYBRIS [Y]:如何在后台创建我们的自定义小部件

来自分类Dev

如何创建自定义的fld sdk小部件,重建flutter和使用新的小部件

来自分类Dev

如何在QT Creator中升级自定义小部件

来自分类Dev

如何在Flutter中将自定义小部件项目填充到ListView中?

来自分类Dev

如何在KV lang中设置来自父项的自定义窗口小部件的文本?

来自分类Dev

如何在Flutter中自定义Slider小部件的拇指颜色?

来自分类Dev

如何在Django表单中为窗口小部件提供自定义名称

来自分类Dev

如何在Gnome3中为单个非GTK3应用程序窗口自定义窗口装饰器?

来自分类Dev

我如何在GTK 3中对齐小部件

来自分类Dev

如何自定义android小部件

来自分类Dev

Yii中的自定义小部件

来自分类Dev

Yii中的自定义小部件

来自分类Dev

具有模板UI的自定义Gtk小部件

来自分类Dev

瓦拉GTK +。自定义窗口小部件的问题

来自分类Dev

在连接gtk小部件时传递自定义变量

来自分类Dev

通过CSS在gtk3中的不同小部件之间共享小部件宽度

来自分类Dev

自定义小部件中的自定义onClickListner-如何?

来自分类Dev

是否可以使用D3 JS在Hue中创建自定义窗口小部件?

Related 相关文章

  1. 1

    如何在gtk3中将特定的CSS类设置为小部件?(C)

  2. 2

    如何在应用小部件中创建类似于Google Play音乐小部件中的自定义视图?

  3. 3

    如何在自定义小部件中显示QChartView?

  4. 4

    如何在 Flutter 中自定义 Slider 小部件?

  5. 5

    如何在GTK3中添加VTE终端窗口小部件?

  6. 6

    如何在Qt / C ++中构建自定义的本机OSX Webkit小部件?

  7. 7

    如何在自定义函数中创建动态窗口小部件并在viewDidLoad中调用它们?

  8. 8

    cakephp 3.x 创建自定义小部件

  9. 9

    在Wordpress中创建自定义小部件

  10. 10

    如何在python 3.4中使用Gtk3在背景图像上插入小部件?

  11. 11

    如何在Xamarin小部件中使用自定义行创建ListView

  12. 12

    SAP HYBRIS [Y]:如何在后台创建我们的自定义小部件

  13. 13

    如何创建自定义的fld sdk小部件,重建flutter和使用新的小部件

  14. 14

    如何在QT Creator中升级自定义小部件

  15. 15

    如何在Flutter中将自定义小部件项目填充到ListView中?

  16. 16

    如何在KV lang中设置来自父项的自定义窗口小部件的文本?

  17. 17

    如何在Flutter中自定义Slider小部件的拇指颜色?

  18. 18

    如何在Django表单中为窗口小部件提供自定义名称

  19. 19

    如何在Gnome3中为单个非GTK3应用程序窗口自定义窗口装饰器?

  20. 20

    我如何在GTK 3中对齐小部件

  21. 21

    如何自定义android小部件

  22. 22

    Yii中的自定义小部件

  23. 23

    Yii中的自定义小部件

  24. 24

    具有模板UI的自定义Gtk小部件

  25. 25

    瓦拉GTK +。自定义窗口小部件的问题

  26. 26

    在连接gtk小部件时传递自定义变量

  27. 27

    通过CSS在gtk3中的不同小部件之间共享小部件宽度

  28. 28

    自定义小部件中的自定义onClickListner-如何?

  29. 29

    是否可以使用D3 JS在Hue中创建自定义窗口小部件?

热门标签

归档