【问题标题】:How to use CssStyleProvider in Gtkmm3如何在 Gtkmm3 中使用 CssStyleProvider
【发布时间】:2011-07-12 15:04:29
【问题描述】:

我正在用 gtkmm3 用 C++ 编程。我想在我的程序中更改一些字体。我在 gtkmm 文档和 gtk+ 文档中阅读了有关 CssStyleProvider、StyleContext 的所有内容,但我无法使其工作,也找不到任何关于此的教程。我正在尝试这样

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*/

也试过这样

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*/

我在运行我的主窗口之前和运行它之后都尝试了这些,但我没有运气。任何帮助表示赞赏。

【问题讨论】:

    标签: c++ css gtk gtkmm gtk3


    【解决方案1】:

    您是否也尝试过使用宏 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION 而不是 0?

    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 << "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;
    }
    

    【讨论】:

      【解决方案2】:

      我不知道gtkmm和css,但是web上的css在font-name:Sans 6之后需要;

      除此之外,根据GTK::CssProvider 参考资料,您所拥有的一切看起来都是正确的

      【讨论】:

      • 我怀疑这也是问题所在。缺少分号会导致问题。
      • @jasonmclose 来自更新的帖子,看来发帖者已经尝试过使用逗号和不使用逗号。
      • web 上的 css 也不需要分号,如果它是最后一个属性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多