在林间空地上制作GtkLabel填充宽度

在林间空地上制作GtkLabel填充宽度,gtk,glade,Gtk,Glade,在Glade(针对GTK2.24的版本为3.8.5)中,我创建了一个位于vbox一行中的标签。我已经将标签的背景色(在属性中)设置为蓝色,并且标签显示为填充整行。但蓝色背景仅延伸到文本范围,而不是标签的整个宽度 如何使蓝色条延伸到面板边缘?我不久前读到Gtk标签实际上没有自己的颜色,但它们采用其背景控件的任何颜色。我不记得这段信息的来源,但我记得解决方案,即将标签放入Gtk EventBox中,并更改所述EventBox的颜色。我在我的gtk项目中测试了这个解决方案,结果很好 这是我用来改变En

在Glade(针对GTK2.24的版本为3.8.5)中,我创建了一个位于vbox一行中的标签。我已经将标签的背景色(在属性中)设置为蓝色,并且标签显示为填充整行。但蓝色背景仅延伸到文本范围,而不是标签的整个宽度


如何使蓝色条延伸到面板边缘?

我不久前读到Gtk标签实际上没有自己的颜色,但它们采用其背景控件的任何颜色。我不记得这段信息的来源,但我记得解决方案,即将标签放入Gtk EventBox中,并更改所述EventBox的颜色。我在我的gtk项目中测试了这个解决方案,结果很好

这是我用来改变Engbox的颜色的函数,我用的是GTK和格莱德稍旧的版本,我使用C++,所以如果你用C,你必须找到每个函数的C等价物:

void GuiUtil::changeColor(Gtk::Widget* widget, double r, double g, double b) {
    Glib::RefPtr<Gdk::Colormap> colormap = widget->get_colormap();
    Glib::RefPtr<Gtk::Style> style = widget->get_style()->copy();

    // STATE_NORMAL (most of the time)
    {
        Gdk::Color color;
        color.set_rgb_p(r,g,b);
        colormap->alloc_color(color);
        style->set_bg(Gtk::STATE_NORMAL, color);
    }

    // STATE_PRELIGHT (when mouse hovers)
    {
        Gdk::Color color;
        color.set_rgb_p(r*0.9,g*0.9,b*0.9);
        colormap->alloc_color(color);
        style->set_bg(Gtk::STATE_PRELIGHT, color);
    }

    // STATE_ACTIVE (when clicked)
    {
        Gdk::Color color;
        color.set_rgb_p(r*0.8,g*0.8,b*0.8);
        colormap->alloc_color(color);
        style->set_bg(Gtk::STATE_ACTIVE, color);
    }

    widget->set_style(style);
}
void GuiUtil::changeColor(Gtk::Widget*Widget,双r,双g,双b){
Glib::RefPtr colormap=widget->get_colormap();
Glib::RefPtr style=widget->get_style()->copy();
//状态正常(大部分时间)
{
颜色;
颜色。设置为(r,g,b);
颜色映射->alloc_颜色(颜色);
样式->设置背景(Gtk::状态正常,颜色);
}
//状态预亮(鼠标悬停时)
{
颜色;
颜色设置(r*0.9,g*0.9,b*0.9);
颜色映射->alloc_颜色(颜色);
样式->设置背景(Gtk::状态预照明,颜色);
}
//激活状态(单击时)
{
颜色;
颜色设置(r*0.8,g*0.8,b*0.8);
颜色映射->alloc_颜色(颜色);
样式->设置背景(Gtk::状态激活,颜色);
}
小部件->设置样式(样式);
}
据我所知,没有一种方法可以只用Glade来做这件事