C 在gtk 3.0中更改背景色

C 在gtk 3.0中更改背景色,c,gtk3,C,Gtk3,编译器可以工作,但不会更改窗口的背景 为什么会这样? 这是我的代码: #include <gtk/gtk.h> #include <stdlib.h> // initialize the window void initwindow(float factor,const char* title,GtkWidget* window){ gtk_window_set_default_size(GTK_WINDOW(window), gdk_screen_get_w

编译器可以工作,但不会更改窗口的背景 为什么会这样? 这是我的代码:

 #include <gtk/gtk.h>
 #include <stdlib.h>

// initialize the window 
void initwindow(float factor,const char* title,GtkWidget* window){
  gtk_window_set_default_size(GTK_WINDOW(window), gdk_screen_get_width (gdk_screen_get_default ())*factor,gdk_screen_get_height(gdk_screen_get_default ())*factor);
  gtk_window_set_title(GTK_WINDOW(window),title);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);}

// create random doubles
double randdouble(){
  return (double)rand() / (double)RAND_MAX; }

// function to change backgrounf

void changwindowcolor(GtkWidget* button){
  GdkRGBA color;
  color.red=randdouble();
  color.green=randdouble();
  color.blue=randdouble();
  color.alpha=1;
  gtk_widget_override_background_color(button, GTK_STATE_NORMAL,&color);}

void activate(GtkApplication *app,gpointer user_data){
  const char *title="Myapp";
  GtkWidget *window= gtk_application_window_new (app);
  GtkWidget *layout = gtk_grid_new();
  GtkWidget *button = gtk_button_new_with_label("color");
  initwindow(0.5,title,window);
  gtk_container_add (GTK_CONTAINER (window), layout);
  g_signal_connect(button, "clicked", G_CALLBACK(changwindowcolor),button);
  gtk_grid_attach(GTK_GRID (layout), button, 0,0,1,1);
  gtk_widget_show_all(window);}

int main(int argc, char **argv){

  GtkApplication *app = gtk_application_new ("org.gtk.example",G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  int status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);
  return status;}
#包括
#包括
//初始化窗口
void initwindow(浮点因子、常量字符*标题、GtkWidget*窗口){
gtk_window_set_default_size(gtk_window(window)、gdk_screen_get_width(gdk_screen_get_default())*因子、gdk_screen_get_height(gdk_screen_get_default())*因子;
gtk_窗口_设置_标题(gtk_窗口(窗口),标题);
gtk_窗口_设置_位置(gtk_窗口(窗口)、gtk_WIN_位置_中心)}
//创建随机双精度
双随机双(){
return(double)rand()/(double)rand_MAX;}
//用于更改背景的函数
窗口颜色无效(GtkWidget*按钮){
GdkRGBA颜色;
color.red=randdouble();
color.green=randdouble();
color.blue=randdouble();
颜色α=1;
gtk_控件_覆盖_背景_颜色(按钮、gtk_状态_正常和颜色);}
无效激活(GTK应用程序*应用程序、gpointer用户数据){
const char*title=“Myapp”;
GtkWidget*窗口=gtk_应用程序_窗口_新(应用程序);
GtkWidget*layout=gtk_grid_new();
GtkWidget*button=gtk_button_new_,带_标签(“颜色”);
初始化窗口(0.5,标题,窗口);
gtk_容器添加(gtk_容器(窗口),布局);
g_信号连接(按钮,“点击”,g_回调(颜色),按钮);
gtk_网格连接(gtk_网格(布局),按钮,0,0,1,1);
gtk_小部件_show_all(窗口);}
int main(int argc,字符**argv){
GtkApplication*app=gtk_application_new(“org.gtk.example”,G_application_FLAGS_NONE);
g_信号连接(应用程序,“激活”,g_回调(激活),空);
int status=g_应用程序运行(g_应用程序(应用程序)、argc、argv);
g_object_unref(应用程序);
返回状态;}

不推荐使用
gtk\u window\u override\u background\u color
函数,因此尝试不同的方法可能比调试此方法更好


相反,创建一个
GtkCssProvider
,将
*{background color:#123456;}
之类的CSS加载到其中,并使用
gtk_style_context\u add_provider
gtk_window_override_background__color
函数添加到按钮的样式上下文中,因此,尝试不同的方法可能比调试此方法更好


相反,创建一个
GtkCssProvider
,将诸如
*{background color:#123456;}
之类的CSS加载到其中,并使用
gtk_style_context\u add_provider
将其添加到按钮的样式上下文中。。。它是做什么的?调试时发生了什么?当你按下按钮时changwindowcolor()是否被调用?是否有鼻魔?好的,嗯。。。它是做什么的?调试时发生了什么?当你按下按钮时,changwindowcolor()是否被调用?是否有鼻恶魔?