如何解决gtk_container_add: 断言 'GTK_IS_WIDGET (widget)' 失败
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);
}
}
我希望应用在点击标题栏右侧的按钮时切换到首选项视图,
为什么会这样?我该如何解决?
解决方法
preferences_stack.add (preferences_view);
preferences_stack.add (main_view);
您还没有初始化 preferences_view
,也从未初始化 main_view
。这就是您的第二个和第三个错误的来源:gtk_container_add()
抱怨您尝试添加的小部件实际上不是小部件,而是 null
,因为您尚未初始化该变量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。