Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改GTK按钮悬停的文本颜色_C++_Button_Colors_Gtk_Gtk2 - Fatal编程技术网

C++ 更改GTK按钮悬停的文本颜色

C++ 更改GTK按钮悬停的文本颜色,c++,button,colors,gtk,gtk2,C++,Button,Colors,Gtk,Gtk2,我有以下代码: GdkColor color; gdk_color_parse ("black", &color); GdkColor color2; gdk_color_parse ("red", &color2); button = gtk_button_new_with_label ("Text"); g_signal_connect (button, "clicked", G_CALLBACK (a), NULL); gtk_widget_modify_bg ( GTK_

我有以下代码:

GdkColor color;
gdk_color_parse ("black", &color);
GdkColor color2;
gdk_color_parse ("red", &color2);
button = gtk_button_new_with_label ("Text");
g_signal_connect (button, "clicked", G_CALLBACK (a), NULL);
gtk_widget_modify_bg ( GTK_WIDGET(button), GTK_STATE_PRELIGHT, &color);
gtk_widget_modify_text ( GTK_WIDGET(button), GTK_STATE_PRELIGHT, &color2);
gtk_table_attach_defaults (GTK_TABLE (outside), button, 0, 1, 0, 1);
gtk_widget_show (button);

尽管鼠标移到背景上时背景会变为黑色,但文本不会改变颜色。如何更改此选项?

虽然我不知道此代码为何不起作用,但我找到了一个解决方法:

g_signal_connect (button, "enter", G_CALLBACK (changeColor), NULL);
g_signal_connect (button, "leave", G_CALLBACK (revertColor), NULL);
gtk_widget_modify_bg ( GTK_WIDGET(button), GTK_STATE_NORMAL, &color);
gtk_widget_modify_bg ( GTK_WIDGET(button), GTK_STATE_PRELIGHT, &color2);

static void changeColor(GtkWidget *widget, gpointer data) {

    GdkColor color;
    color.red = 0x0;
    color.green = 0x0;
    color.blue = 0x0;
    GList *list;
    std::string s = (std::string)"<span color=\"black\">" + (std::string)(gtk_widget_get_name(widget))+"</span>";
    list = gtk_container_get_children(GTK_CONTAINER (widget));
    gtk_label_set_markup(GTK_LABEL(list->data), s.c_str());
}

static void revertColor(GtkWidget *widget, gpointer data) {

    GdkColor color;
    color.red = 0x0;
    color.green = 0x0;
    color.blue = 0x0;
    GList *list;
    std::string s = (std::string)"<span color=\"white\">" + (std::string)(gtk_widget_get_name(widget))+"</span>";
    list = gtk_container_get_children(GTK_CONTAINER (widget));
    gtk_label_set_markup(GTK_LABEL(list->data), s.c_str());
}
g_信号连接(按钮“回车”,g_回调(更改颜色),空);
g_信号连接(按钮“离开”,g_回调(回复颜色),空);
gtk_小部件_修改_背景(gtk_小部件(按钮)、gtk_状态_正常和颜色);
gtk_小部件_修改_背景(gtk_小部件(按钮)、gtk_状态_预照明和彩色2);
静态void changeColor(GtkWidget*小部件,gpointer数据){
GdkColor颜色;
color.red=0x0;
color.green=0x0;
color.blue=0x0;
GList*列表;
std::string s=(std::string)“+(std::string)(gtk_widget_get_name(widget))+”;
列表=gtk_容器_获取_子对象(gtk_容器(小部件));
gtk_标签设置标记(gtk_标签(列表->数据),s.c_str());
}
静态无效还原颜色(GtkWidget*小部件,gpointer数据){
GdkColor颜色;
color.red=0x0;
color.green=0x0;
color.blue=0x0;
GList*列表;
std::string s=(std::string)“+(std::string)(gtk_widget_get_name(widget))+”;
列表=gtk_容器_获取_子对象(gtk_容器(小部件));
gtk_标签设置标记(gtk_标签(列表->数据),s.c_str());
}
这些回调会根据需要更改颜色和字体