2013-01-19 71 views
6

有人可以键入一个简单的例子,用CSS来设计一个GTK +小部件吗?我无法弄清楚如何做到这一点看文档:如何使用自定义CSS设计GTK +的样式?

#include <gtk/gtk.h> 
int main(int argc,char *argv[]) 
{ 
    gtk_init(&argc,&argv); 
    GtkWidget *window; 
    GtkWidget *button; 
    GtkCssProvider *cssProvider; 

    gtk_css_provider_load_from_path(cssProvider,"./gtkExample2.css",NULL); 

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    button = gtk_button_new_with_label("GTK Button"); 

    gtk_style_context_add_provider(gtk_widget_get_style_context(window),cssProvider,GTK_STYLE_PROVIDER_PRIORITY_USER); 

    g_signal_connect_swapped(window,"delete-event",G_CALLBACK(gtk_widget_destroy),window); 

    gtk_container_set_border_width(GTK_CONTAINER(window),20); 
    gtk_container_add(GTK_CONTAINER(window),button); 

    gtk_widget_show(window); 
    gtk_widget_show(button); 

    gtk_main(); 
    return 1; 
} 
+0

我一直在尝试,我会添加我目前的东西 – user1502482

+0

你有什么问题与该代码? –

+0

编译明智,参数2传递到gtk_style_context_add_provider是不正确的。它需要GtkStyleProvider,我提供了GtkCssProvider,我不知道如何获得GtkStyleProvider – user1502482

回答

1

不知道GTK3(约CSS样式单一的东西,除了它经常断裂的开发人员更喜欢修东西 - 尊重CSS标准 - 比通过版本保持兼容性)。

不过,我可以告诉你,这是错误的:

g_signal_connect_swapped(window,"delete-event",G_CALLBACK(gtk_widget_destroy),window); 

你真正想要的是什么时,主窗口关闭其停止GTK。这是这样完成的:

g_signal_connect(window,"destroy", G_CALLBACK(gtk_main_quit), NULL); 

另一个要点是,你打电话

gtk_widget_show(window); 
gtk_widget_show(button); 

当控件树已经完成(即你停止添加在容器控件并在容器顶层窗口),这可以简化为:

gtk_widget_show_all(window); 

也请注意,这应该工作成功返回0,并使用非零值TOR报告错误的程序。

+2

这不回答这个问题 – user877329