如何从 css 资源为 gtkmm3 中的多个 glade 小部件设置主题
How to set theme from css resource for multiple glade widgets in gtkmm3
我完成了所有包含并使用了名称空间
#include "include/main.h"
#include <iostream>
#include <gtkmm.h>
using namespace std;
using namespace Gtk;
Window* appWindow = nullptr;
加载 glade 文件并尝试加载小部件的主题
auto refBuilder = Builder::create();
auto refProvider = CssProvider::create();
auto refStyleContext = StyleContext::create();
try
{
refBuilder->add_from_resource("/res/gui.glade");
refProvider->load_from_resource("/res/theme.css");
}
发现错误。它是做什么的。当它无法加载任何一个资源时都会出错。
catch(const Glib::FileError& ex)
{
cerr << "FileError: " << ex.what() << endl;
return 1;
}
catch(const Glib::MarkupError& ex)
{
cerr << "MarkupError: " << ex.what() << endl;
return 1;
}
catch(const Gtk::BuilderError& ex)
{
cerr << "BuilderError: " << ex.what() << endl;
return 1;
}
现在我似乎无法为我的小部件应用 css
refBuilder->get_widget("winFrame", appWindow);
if(appWindow)
{
Glib::RefPtr<Gdk::Screen>refScreen = appWindow->get_screen();
refBuilder->get_widget("quit_Item", quitItem);
refStyleContext->add_provider_for_screen(refScreen, refProvider, GTK_STYLE_PROVIDER_PRIORITY_USER);
if(quitItem)
{
quitItem->signal_activate().connect( sigc::ptr_fun(on_button_clicked) );
};
};
app->run(*appWindow);
delete appWindow;
return 0;
我有以下 css 我曾经尝试过,但连一个按钮都没有改变颜色
.recordButton {
color: red;
background: blue;
border-color: red;
}
GtkBox{
background: #669999;
text-shadow: 1px 1px 5px black;
box-shadow: 0px 0px 5px black;
border: 1px solid black;
}
Buton{
background: #669999;
text-shadow: 1px 1px 5px black;
box-shadow: 0px 0px 5px black;
border: 1px solid black;
}
重新访问我的代码后。我试图复制
的语句
try{}
catch {}
我就是这样让它工作的
refBuilder->get_widget("winFrame", appWindow);
if(appWindow)
{
try
{
refProvider->load_from_resource("/res/default-theme.css");
Glib::RefPtr<Gdk::Screen> refScreen = appWindow->get_screen();
refStyleContext->add_provider_for_screen(refScreen, refProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
catch(const Gio::ResourceError& ex)
{
cerr << "ResourceError: " << ex.what() << endl;
return 1;
}
catch(const Glib::MarkupError& ex)
{
cerr << "MarkupError: " << ex.what() << endl;
return 1;
}
catch(const Gtk::CssProviderError& ex)
{
cerr << "CssProviderError: " << ex.what() << endl;
return 1;
}
catch(const Glib::Error& ex)
{
cerr << "GlibError: " << ex.what() << endl;
return 1;
};
};
我还发现我的 css 文件格式有问题。我得到了 GTK+ CSS Reference 的帮助。我的林间空地在 windows 之后有一个 GtkBox,所以新的 css 有
box * {
background-color: teal;
font: italic bold 14px Ani;
}
应用于GtkBox下的child
可悲的是,我仍在努力使小部件周围的边框正常工作,但至少现在我知道正在应用 css 主题
我完成了所有包含并使用了名称空间
#include "include/main.h"
#include <iostream>
#include <gtkmm.h>
using namespace std;
using namespace Gtk;
Window* appWindow = nullptr;
加载 glade 文件并尝试加载小部件的主题
auto refBuilder = Builder::create();
auto refProvider = CssProvider::create();
auto refStyleContext = StyleContext::create();
try
{
refBuilder->add_from_resource("/res/gui.glade");
refProvider->load_from_resource("/res/theme.css");
}
发现错误。它是做什么的。当它无法加载任何一个资源时都会出错。
catch(const Glib::FileError& ex)
{
cerr << "FileError: " << ex.what() << endl;
return 1;
}
catch(const Glib::MarkupError& ex)
{
cerr << "MarkupError: " << ex.what() << endl;
return 1;
}
catch(const Gtk::BuilderError& ex)
{
cerr << "BuilderError: " << ex.what() << endl;
return 1;
}
现在我似乎无法为我的小部件应用 css
refBuilder->get_widget("winFrame", appWindow);
if(appWindow)
{
Glib::RefPtr<Gdk::Screen>refScreen = appWindow->get_screen();
refBuilder->get_widget("quit_Item", quitItem);
refStyleContext->add_provider_for_screen(refScreen, refProvider, GTK_STYLE_PROVIDER_PRIORITY_USER);
if(quitItem)
{
quitItem->signal_activate().connect( sigc::ptr_fun(on_button_clicked) );
};
};
app->run(*appWindow);
delete appWindow;
return 0;
我有以下 css 我曾经尝试过,但连一个按钮都没有改变颜色
.recordButton {
color: red;
background: blue;
border-color: red;
}
GtkBox{
background: #669999;
text-shadow: 1px 1px 5px black;
box-shadow: 0px 0px 5px black;
border: 1px solid black;
}
Buton{
background: #669999;
text-shadow: 1px 1px 5px black;
box-shadow: 0px 0px 5px black;
border: 1px solid black;
}
重新访问我的代码后。我试图复制
的语句try{}
catch {}
我就是这样让它工作的
refBuilder->get_widget("winFrame", appWindow);
if(appWindow)
{
try
{
refProvider->load_from_resource("/res/default-theme.css");
Glib::RefPtr<Gdk::Screen> refScreen = appWindow->get_screen();
refStyleContext->add_provider_for_screen(refScreen, refProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
catch(const Gio::ResourceError& ex)
{
cerr << "ResourceError: " << ex.what() << endl;
return 1;
}
catch(const Glib::MarkupError& ex)
{
cerr << "MarkupError: " << ex.what() << endl;
return 1;
}
catch(const Gtk::CssProviderError& ex)
{
cerr << "CssProviderError: " << ex.what() << endl;
return 1;
}
catch(const Glib::Error& ex)
{
cerr << "GlibError: " << ex.what() << endl;
return 1;
};
};
我还发现我的 css 文件格式有问题。我得到了 GTK+ CSS Reference 的帮助。我的林间空地在 windows 之后有一个 GtkBox,所以新的 css 有
box * {
background-color: teal;
font: italic bold 14px Ani;
}
应用于GtkBox下的child 可悲的是,我仍在努力使小部件周围的边框正常工作,但至少现在我知道正在应用 css 主题