Итак, я новичок в разработке GUI, и я просто реализую пользовательский интерфейс с C ++ в Raspbian OS, используя Gtkmm3.0 (обертка GTK для c ++). Я пытаюсь применить индивидуальный дизайн к кнопке с CSS через Gtk :: CssProvider, которая прекрасно работает.
css = Gtk::CssProvider::create();
css->load_from_path("css/theme.css");
auto ctx_mnew_session = mnew_session.get_style_context();
ctx_mnew_session->add_provider(css,GTK_STYLE_PROVIDER_PRIORITY_USER );
ctx_mnew_session->add_class("th-button");
ctx_mlast_session->context_save();
моя th-кнопка - это css определенный класс, подобный этому:
.th-button
{
background-color:#000000;
color:#ffffff;
border:solid 2px #ffffff;
border-radius: 7px;
}
.th-button:active
{
background-color:#ffffff;
color:#000000;
}
Конструкция отлично подходит, но не учитывает активное состояние. Неважно, нажимаю я кнопку или нет, дизайн не меняется, хотя в справочнике Gtk + говорится, что обработчик: active обрабатывается.
Другое использование псевдоклассов должен соответствовать виджетам в зависимости от их состояния. Для состояний виджетов доступны следующие псевдоклассы: активный,: hover: отключен,: выбран,: фокус,: неопределен,: отмечен и: фон. Кроме того, следующие псевдоклассы не имеют прямого эквивалента в качестве состояния виджета:: dir (ltr) и: dir (rtl) (для направления текста),: link and :ited (для ссылок) и: drop ( активный) (для подсветки выпадающих целей). Псевдоклассы состояния виджетов могут применяться только к последнему элементу в селекторе.
Имеет ли это для вас какой-либо смысл?
Config: Raspbian OS на Raspberry Pi 4 / GTKmm 3.24 .0
Архитектура моего виджета