来自 libadwaita 的 AdwViewSwitcher 的简单示例

问题描述 投票:0回答:1

我无法让

AdwViewSwitcher
显示任何内容。我没有收到任何错误,但没有任何显示。这是我的代码:

PRIVATE GtkWidget *window = NULL;
PRIVATE GtkWidget *pref   = NULL;

PRIVATE GtkWidget *theme = NULL;

PRIVATE GtkFontDialog *font_dialog = NULL;
PRIVATE GtkWidget     *font        = NULL;

PRIVATE GtkWidget *about = NULL;

PRIVATE GtkWidget *view   = NULL;
PRIVATE GtkWidget *stack1 = NULL;
PRIVATE GtkWidget *stack2 = NULL;
PRIVATE GtkWidget *button = NULL;

PRIVATE
void theme_ev(GtkWidget *widget, GParamSpec *param_spec, gpointer user_data) {
        SDL_Log("Theme");
}

PRIVATE
void font_ev(GtkWidget *widget, GParamSpec *param_spec, gpointer user_data) {
        SDL_Log("Font");
}

PRIVATE
void about_ev(GtkButton *button, gpointer user_data) {
        adw_show_about_window(GTK_WINDOW(window), 
                              "application-name", "Editor Example",
                              NULL);
}

API
SDL_bool SetupEditor(GtkApplication *app, gpointer *unused) {
        SDL_DisplayMode *mode = GetDisplayMode();

        window = gtk_application_window_new(app);
        gtk_window_set_title(GTK_WINDOW(window), "GameEngine Editor");
        gtk_window_set_default_size(GTK_WINDOW(window), mode->w, mode->h);

        pref = adw_header_bar_new();
        gtk_window_set_titlebar(GTK_WINDOW(window), pref);

        theme = gtk_source_style_scheme_chooser_button_new();
        adw_header_bar_pack_start(ADW_HEADER_BAR(pref), theme);
        g_signal_connect(theme, "notify::style-scheme", G_CALLBACK(theme_ev), NULL);

        font_dialog = gtk_font_dialog_new();
        font        = gtk_font_dialog_button_new(font_dialog);
        adw_header_bar_pack_start(ADW_HEADER_BAR(pref), font);
        g_signal_connect(font, "notify::font-desc", G_CALLBACK(font_ev), NULL);

        about = gtk_button_new_with_label("About");
        adw_header_bar_pack_end(ADW_HEADER_BAR(pref), about);
        g_signal_connect(about, "clicked", G_CALLBACK(about_ev), NULL);

        view   = adw_view_switcher_new();
        stack1 = adw_view_stack_new();
        stack2 = adw_view_stack_new();
        button = gtk_button_new_with_label("Game Editor");
        adw_view_stack_add(ADW_VIEW_STACK(stack1), button);
        button = gtk_button_new_with_label("Script Editor");
        adw_view_stack_add(ADW_VIEW_STACK(stack2), button);
        adw_view_switcher_set_stack(ADW_VIEW_SWITCHER(view), ADW_VIEW_STACK(stack1));
        adw_view_switcher_set_stack(ADW_VIEW_SWITCHER(view), ADW_VIEW_STACK(stack2));
        adw_header_bar_pack_end(ADW_HEADER_BAR(pref), view);


        gtk_window_present(GTK_WINDOW(window));

        return SDL_TRUE;
}

我想看到几个选项卡指示两个视图。参考文档或演示中没有示例。它不必看起来像这样我只想要一个 AdwViewSwitcher 的简单示例。最好是像图像这里那样显示的。

c gnome gobject gtk4
1个回答
0
投票

在 GTK 中构建图形界面的最简单方法是使用 xml,而不是直接通过代码创建小部件。 Workbench 有一个很好的 Adw.ViewSwitcher 示例,以及其他几个示例。也就是说,您至少需要以下小部件:

  • 一扇窗
  • 一个盒子作为窗口内容
  • Adw.HeaderBar 作为 Box 子项
  • AdwViewStack 作为 Box 子项
  • Adw.ViewSwitcher 作为 Adw.HeaderBar 的标题小部件

并且,如果您希望界面具有自适应性

  • AdwViewSwitcherBar 作为 Box 的子项
  • AdwBreakpoint 作为窗口子级,用于隐藏 Adw.ViewSwitcher 并根据窗口的大小显示 AdwViewSwitcherBar。
© www.soinside.com 2019 - 2024. All rights reserved.