【问题标题】:How to set theme from css resource for multiple glade widgets in gtkmm3如何从 CSS 资源中为 gtkmm3 中的多个 glade 小部件设置主题
【发布时间】:2018-08-29 12:37:22
【问题描述】:

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

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

【问题讨论】:

    标签: c++ glade gtkmm3


    【解决方案1】:

    重新访问我的代码后。我试图复制声明

    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 主题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-01
      • 2021-07-07
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多