gtk (mm) 3 кнопки, изменение цвета фона - PullRequest
6 голосов
/ 21 января 2012

Я пытаюсь изменить цвет фона кнопки на красный, но, похоже, он не работает. Я вставляю пример кода. Если кто-нибудь может сказать мне, как исправить мой код, пожалуйста, помогите.

#include <gtkmm.h>

// g++ simple.cc -o simple `pkg-config gtkmm-3.0 --cflags --libs`

int  main(int argc, char *argv[])
{
    Gtk::Main kit(argc, argv);
    Gtk::Window  window;
    Gtk::Button  button("TEST");
    button.override_background_color(Gdk::RGBA("red"));
    window.add(button);
    window.show_all();
    Gtk::Main::run(window);
    return EXIT_SUCCESS;
}

UPDATE: хорошо, вот как я решил:

mr_screen = Gdk::Screen::get_default();
mr_style_context = mp_window->get_style_context();
mr_css_provider = Gtk::CssProvider::create();
mr_css_provider->load_from_path(Glib::build_filename(m_glade_dir_path, "filename.css"));
mr_style_context->add_provider_for_screen(mr_screen, mr_css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

и содержимое файла filename.css:

column-header .button {
    background-image: -gtk-gradient (linear,
        left top,
        left bottom,
        from (#51cccc),
        color-stop (0.5, darker (#51cccc)),
        to (#51cccc));
}

Ответы [ 2 ]

1 голос
/ 26 октября 2018

На самом деле, я усвоил трудный путь, что CssProvider - верный способ справиться с такими вещами. Вам не нужно использовать glade, даже хорошо, если в вашем коде есть css, например:

#include <gtkmm.h>

Gtk::Button* button = new Gtk::Button("Test");
Glib::RefPtr<Gtk::CssProvider> css_provider = Gtk::CssProvider::create();
css_provider->load_from_data(
    "button {background-image: image(cyan);}\
     button:hover {background-image: image(green);}\
     button:active {background-image: image(brown);}");
button->get_style_context()->add_provider(
    css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER);

Вы должны иметь дело с background-image, потому что background-color перекрывается с background-image по умолчанию и, следовательно, не изменяется У меня есть мудрость от Ruby-GNOME2

0 голосов
/ 12 мая 2012

У меня нет опыта работы с C ++, но я использую Python, в Python вы должны сделать это:

button.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(1.0 , 0.0 , 0.0, 1.0))

может быть, в C ++ вы должны сделать это

button.override_background_color(GTK_STATE_FLAGS_NORMAL, Gdk::RGBA(1.0 , 0.0 , 0.0, 1.0));
...