如何在Gtkmm3中使用CssStyleProvider [英] How to use CssStyleProvider in Gtkmm3

查看:142
本文介绍了如何在Gtkmm3中使用CssStyleProvider的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用c ++编程gtkmm3。我想在我的程序中更改一些字体。我在gtkmm文档中以及gtk + documentaion中阅读了关于CssStyleProvider,StyleContext的所有内容,但是我无法使其工作并找不到任何有关该教程的教程。我想这样

  Glib :: ustring数据; 
data =GtkMenuBar,GtkMenuItem {font-name:Sans 6}; / *用分号尝试* /
Glib :: RefPtr< Gtk :: CssProvider> asd = Gtk :: CssProvider :: create();
Glib :: RefPtr< Gtk :: StyleContext> asd2 = Gtk :: StyleContext :: create();
asd-> load_from_data(data);
asd2-> add_provider(asd,0); / *也尝试了不同的优先事项* /

也是这样尝试的

  Glib :: ustring数据; 
data =GtkMenuBar,GtkMenuItem {font-name:Sans 6}; / *用分号尝试* /
Glib :: RefPtr< Gtk :: CssProvider> asd = Gtk :: CssProvider :: create();
Glib :: RefPtr< Gdk :: Screen>屏幕;
Glib :: RefPtr< Gtk :: StyleContext> asd2 = Gtk :: StyleContext :: create();
asd-> load_from_data(data);
(mainWindow.get()) - > get_property(screen,screen);
asd2-> add_provider(screen,asd,0); / *也尝试了不同的优先级* /

在运行主窗口之前,但我没有运气。感谢您的任何帮助。

解决方案

您是否还尝试使用宏GTK_STYLE_PROVIDER_PRIORITY_APPLICATION而不是0?
$ b

  asd2-> add_provider(screen,asd,macro GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); 

适用于我,也适用于Windows。



<例如:

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

Main app (argc,argv);
Glib :: ustring data =GtkLabel {color:#ff00ea; font:Comic Sans MS 12};
auto css = CssProvider :: create();
if(not css-> load_from_data(data)){
cerr<< 无法加载css \ n;
std :: exit(1);
}
标签标签(test);
窗口获胜;
auto screen = Gdk :: Screen :: get_default();
auto ctx = label.get_style_context();
ctx-> add_provider_for_screen(screen,css,GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
win.add(label);
win.show_all();

app.run(win);
返回0;
}


I'm programming in c++ with gtkmm3. I want to change some fonts in my program. I read all the things about CssStyleProvider, StyleContext in gtkmm documentation and also in gtk+ documentaion but i couldn't make it work and couldn't find any tutorial about that. I'm trying like that

Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
asd2->add_provider(asd, 0); /*also tried different priorities*/

also tried like that

Glib::ustring data;
data="GtkMenuBar, GtkMenuItem {font-name: Sans 6}"; /*tried with semi-colon, too*/
Glib::RefPtr<Gtk::CssProvider> asd = Gtk::CssProvider::create();
Glib::RefPtr<Gdk::Screen> screen;
Glib::RefPtr<Gtk::StyleContext> asd2 = Gtk::StyleContext::create();
asd->load_from_data(data);
(mainWindow.get())->get_property("screen", screen);
asd2->add_provider(screen, asd, 0); /*also tried different priorities*/

And I tried these before running my main window and after running it but i have no luck. Any help is appreciated.

解决方案

Have you also to tried to use the macro GTK_STYLE_PROVIDER_PRIORITY_APPLICATION instead of 0?

asd2->add_provider(screen, asd, macro GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

Works for me, also on Windows.

Example:

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

  Main app(argc, argv);
  Glib::ustring data = "GtkLabel {color: #ff00ea;font: Comic Sans MS 12}";
  auto css = CssProvider::create();
  if(not css->load_from_data(data)) {
      cerr << "Failed to load css\n";
      std::exit(1);
  }
  Label label("test");
  Window win;
  auto screen = Gdk::Screen::get_default();
  auto ctx = label.get_style_context();
  ctx->add_provider_for_screen(screen, css, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
  win.add(label);
  win.show_all();

  app.run(win);
  return 0;
}

这篇关于如何在Gtkmm3中使用CssStyleProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆