gtk_container_add:断言“GTK_IS_WIDGET(小部件)”失败
Posted
技术标签:
【中文标题】gtk_container_add:断言“GTK_IS_WIDGET(小部件)”失败【英文标题】:gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed 【发布时间】:2021-03-27 08:53:30 【问题描述】:public class Epoch.MainWindow : Gtk.ApplicationWindow
private Gtk.Grid grid;
private Epoch.LabelsGrid labels;
private Epoch.PreferencesView preferences_view;
private Epoch.MainView main_view;
public MainWindow (Application app)
Object (
application: app,
icon_name: "com.github.Suzie97.epoch",
resizable: false,
title: _("Epoch"),
width_request: 500
);
construct
get_style_context ().add_class ("rounded");
set_keep_below (true);
stick ();
var preferences_button = new Gtk.Button.from_icon_name ("open-menu-symbolic", Gtk.IconSize.SMALL_TOOLBAR);
preferences_button.valign = Gtk.Align.CENTER;
var preferences_stack = new Gtk.Stack ();
preferences_stack.add (preferences_view);
preferences_stack.add (main_view);
preferences_stack.transition_type = Gtk.StackTransitionType.SLIDE_LEFT;
var headerbar = new Gtk.HeaderBar ();
headerbar.show_close_button = true;
var headerbar_style_context = headerbar.get_style_context ();
headerbar_style_context.add_class ("default-decoration");
headerbar_style_context.add_class (Gtk.STYLE_CLASS_FLAT);
headerbar.pack_end (preferences_button);
set_titlebar (headerbar);
var main_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0);
main_box.pack_start (preferences_stack, true, true);
add (main_box);
show_all ();
preferences_view = new Epoch.PreferencesView ();
preferences_button.activate.connect (() =>
preferences_stack.visible_child = preferences_view;
);
// public override bool configure_event (Gdk.EventConfigure event)
// int root_x, root_y;
// get_position (out root_x, out root_y);
// Epoch.settings.set_int ("window-x", root_x);
// Epoch.settings.set_int ("window-y", root_y);
// return base.configure_event (event);
编译时显示如下错误,
我希望应用程序在单击标题栏右侧的按钮时切换到首选项视图,
只有在你看到的时候才会显示标题栏。
为什么会这样?我该如何解决?
【问题讨论】:
【参考方案1】:preferences_stack.add (preferences_view);
preferences_stack.add (main_view);
你还没有初始化preferences_view
,你也从来没有初始化main_view
。这就是您的第二个和第三个错误的来源:gtk_container_add()
抱怨您尝试添加的小部件实际上不是小部件,而是 null
,因为您尚未初始化该变量。
【讨论】:
以上是关于gtk_container_add:断言“GTK_IS_WIDGET(小部件)”失败的主要内容,如果未能解决你的问题,请参考以下文章