[GTK]切换界面

——————————pro—————————————–
INCLUDEPATH += /usr/include/gtk-3.0 \
/usr/include/at-spi2-atk/2.0 \
/usr/include/at-spi-2.0 \
/usr/include/dbus-1.0 \
/usr/lib/x86_64-linux-gnu/dbus-1.0/include \
/usr/include/gtk-3.0 /usr/include/gio-unix-2.0 \
/usr/include/cairo /usr/include/pango-1.0 \
/usr/include/harfbuzz \
/usr/include/pango-1.0 \
/usr/include/fribidi \
/usr/include/harfbuzz \
/usr/include/atk-1.0 \
/usr/include/cairo \
/usr/include/pixman-1 \
/usr/include/uuid \
/usr/include/freetype2 \
/usr/include/gdk-pixbuf-2.0 \
/usr/include/libpng16 \
/usr/include/x86_64-linux-gnu \
/usr/include/libmount \
/usr/include/blkid \
/usr/include/glib-2.0 \
/usr/lib/x86_64-linux-gnu/glib-2.0/include\
/usr/include/

LIBS += -pthread \
-pthread \
-lgtk-3 \
-lgdk-3 \
-lpangocairo-1.0 \
-lpango-1.0 \
-lharfbuzz \
-latk-1.0 \
-lcairo-gobject \
-lcairo \
-lgdk_pixbuf-2.0 \
-lgio-2.0 \
-lgobject-2.0 \
-lglib-2.0 \
-lserialport
SOURCES += \
main.cpp
———————————main.cpp——————————–
#include

// 函数声明
void on_button1_clicked(GtkButton *button, GtkStack *stack);
void on_button2_clicked(GtkButton *button, GtkStack *stack);

int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);

// 创建主窗口
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), “GTK 切换界面示例”);
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
g_signal_connect(window, “destroy”, G_CALLBACK(gtk_main_quit), NULL);

// 创建主容器
GtkWidget *main_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), main_box);

// 创建一个 GtkStack
GtkWidget *stack = gtk_stack_new();
gtk_box_pack_start(GTK_BOX(main_box), stack, TRUE, TRUE, 0);

// 创建界面1
GtkWidget *page1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
GtkWidget *button1 = gtk_button_new_with_label(“切换到界面2”);
g_signal_connect(button1, “clicked”, G_CALLBACK(on_button1_clicked), stack);
gtk_box_pack_start(GTK_BOX(page1), button1, TRUE, TRUE, 0);
gtk_stack_add_named(GTK_STACK(stack), page1, “page1”);

// 创建界面2
GtkWidget *page2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
GtkWidget *button2 = gtk_button_new_with_label(“切换到界面1”);
g_signal_connect(button2, “clicked”, G_CALLBACK(on_button2_clicked), stack);
gtk_box_pack_start(GTK_BOX(page2), button2, TRUE, TRUE, 0);
gtk_stack_add_named(GTK_STACK(stack), page2, “page2”);

// 创建 GtkStackSwitcher
GtkWidget *stack_switcher = gtk_stack_switcher_new();
gtk_box_pack_start(GTK_BOX(main_box), stack_switcher, FALSE, FALSE, 0);

// 将 GtkStackSwitcher 与 GtkStack 关联
gtk_stack_switcher_set_stack(GTK_STACK_SWITCHER(stack_switcher), GTK_STACK(stack));

// 显示所有组件
gtk_widget_show_all(window);

// 运行 GTK 主循环
gtk_main();

return 0;
}

// 切换到界面2的回调函数
void on_button1_clicked(GtkButton *button, GtkStack *stack) {
gtk_stack_set_visible_child_name(GTK_STACK(stack), “page2”);
}

// 切换到界面1的回调函数
void on_button2_clicked(GtkButton *button, GtkStack *stack) {
gtk_stack_set_visible_child_name(GTK_STACK(stack), “page1”);
}

发表评论

邮箱地址不会被公开。 必填项已用*标注