基于gtkmm 3.0+C++,如何修改Gtk::Label的字体?
解决gtkmm 3.0中Gtk::Label字体修改问题
你当前代码的问题在于:通过create_pango_context()创建的是一个新的Pango上下文,但没有将这个上下文关联到Label的文本渲染布局上,所以Label仍然使用默认的上下文,字体设置自然不会生效。
下面提供两种可行的解决方案:
方案一:使用Widget的override_font()方法(推荐)
Gtk::Label继承自Gtk::Widget,而Widget提供了override_font()方法,可以直接将Pango字体描述应用到控件上,这是最简洁的实现方式:
Pango::FontDescription font; font.set_family("Monospace"); font.set_weight(Pango::WEIGHT_ULTRABOLD); font.set_size(14 * PANGO_SCALE); bezeichnung = Gtk::Label("leer"); bezeichnung.set_halign(Gtk::ALIGN_CENTER); bezeichnung.override_font(font); // 直接应用字体描述
方案二:操作Label的Pango布局
如果需要更底层的控制,可以直接获取Label的Pango布局对象,然后为其设置字体描述:
Pango::FontDescription font; font.set_family("Monospace"); font.set_weight(Pango::WEIGHT_ULTRABOLD); font.set_size(14 * PANGO_SCALE); bezeichnung = Gtk::Label("leer"); bezeichnung.set_halign(Gtk::ALIGN_CENTER); auto layout = bezeichnung.get_layout(); if (layout) { layout->set_font_description(font); }
内容的提问来源于stack exchange,提问作者bejo
相关产品推荐
相关产品推荐

