首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从css资源中为gtkmm3中的多个glade小部件设置主题

如何从css资源中为gtkmm3中的多个glade小部件设置主题
EN

Stack Overflow用户
提问于 2018-08-29 20:37:22
回答 1查看 436关注 0票数 0

我做了所有的包含和使用的名称空间

代码语言:javascript
复制
#include "include/main.h"
#include <iostream>
#include <gtkmm.h>

using namespace std;
using namespace Gtk;

Window* appWindow = nullptr;

已加载glade文件并尝试加载小部件的主题

代码语言:javascript
复制
    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");
}

捕获到错误。事实的确如此。当它不能加载这两个资源时,它会给出一个错误。

代码语言:javascript
复制
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应用于我的小部件

代码语言:javascript
复制
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,我用来尝试,但甚至没有一个按钮改变颜色

代码语言:javascript
复制
.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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 18:14:17

在重新查看我的代码之后。我尝试将语句复制到

代码语言:javascript
复制
try{}
catch {}

这就是我是如何让它工作的

代码语言:javascript
复制
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的帮助。我的glade在windows之后有一个GtkBox,所以新的css有

代码语言:javascript
复制
box * {
background-color: teal;
font: italic bold 14px Ani;
}

不幸的是,我仍在努力让小部件周围的边框工作,但至少现在我知道GtkBox主题正在被应用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52077648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档