簡體   English   中英

如何在 Gtkmm3 中使用 CssStyleProvider

[英]How to use CssStyleProvider in Gtkmm3

我正在使用 gtkmm3 在 c++ 中編程。 我想在我的程序中更改一些 fonts。 我在 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*/

我在運行我的主要 window 和運行它之后嘗試了這些,但我沒有運氣。 任何幫助表示贊賞。

您是否也嘗試使用宏 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;
}

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

除此之外,根據GTK::CssProvider參考,您所擁有的一切看起來都是正確的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM