05.xml_layout.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // Created by 李晓明 on 2022/11/24.
  3. //
  4. #include <gtk/gtk.h>
  5. static void print_hello(GtkWidget *widget, gpointer data) {
  6. g_print("Hello: %s\n", (char *) data);
  7. }
  8. int main(int argc, char **argv) {
  9. GError *error = NULL;
  10. gtk_init(&argc, &argv);
  11. GtkCssProvider *css_provider = gtk_css_provider_new();
  12. if (gtk_css_provider_load_from_path(css_provider, "builder.css", &error) == 0) {
  13. g_printerr("Error loading css file: %s\n", error->message);
  14. int err_code = error->code;
  15. g_clear_error(&error);
  16. return err_code;
  17. }
  18. GtkBuilder *builder = gtk_builder_new();
  19. /* 加载样式 文件*/
  20. if (gtk_builder_add_from_file(builder, "builder.ui", &error) == 0) {
  21. g_printerr("Error loading builder file: %s\n", error->message);
  22. int err_code = error->code;
  23. g_clear_error(&error);
  24. return err_code;
  25. }
  26. GObject *window = gtk_builder_get_object(builder, "window");
  27. /* 使样式文件生效 */
  28. gtk_style_context_add_provider_for_screen(gtk_window_get_screen(GTK_WINDOW(window)),
  29. (GtkStyleProvider *) css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);
  30. g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
  31. GObject *button1 = gtk_builder_get_object(builder, "button1");
  32. g_signal_connect(button1, "clicked", G_CALLBACK(print_hello), "button1");
  33. GObject *button2 = gtk_builder_get_object(builder, "button2");
  34. g_signal_connect(button2, "clicked", G_CALLBACK(print_hello), "button2");
  35. GObject *quit = gtk_builder_get_object(builder, "quit");
  36. g_signal_connect(quit, "clicked", G_CALLBACK(gtk_main_quit), NULL);
  37. g_object_unref(builder);
  38. gtk_main();
  39. return 0;
  40. }