gtkmm4 应用程序使用 CSS 样式

前言

  • 程序样式和代码逻辑分离开 使代码逻辑更可观

css选择器

  • Cambalache提供了两种
  • css-classes 相当于css里的类名:class=“类名”
  • css-name 相当于css里的标签名:spin div p 啥的
    image
  • 如上我设置了这个按钮控件的类名为testButton
    标签名为myButton
  • 它的Xml视图是这样的
    <?xml version='1.0' encoding='UTF-8'?>
    <!-- Created with Cambalache 0.16.0 -->
    <interface>
      <!-- interface-name temp3.ui -->
      <requires lib="gtk" version="4.12"/>
      <object class="GtkButton" id="Button1">
        <property name="css-classes">testButton</property>
        <property name="css-name">myButton</property>
        <property name="focusable">True</property>
        <property name="hexpand">True</property>
        <property name="label">Button1</property>
        <property name="vexpand">True</property>
        <property name="vexpand-set">True</property>
      </object>
    </interface>
    

css文件示例

.testButton{
   /*类选择器*/
    background-color: blue; /* Green */
    color: greenyellow;
    border: none;
}
myButton {
   /*标签选择器*/
    background-color: blue; /* Green */
    color: greenyellow;
    border: none;
}

/* 设置按钮在鼠标悬停时的背景色 */
myButton:hover {
   
    background-color: red;
}

源代码

#include <gtkmm.h>
#include <iostream>
class MainWindow : public Gtk::Window
{
   
public:
    // Member widgets:

    MainWindow()
    {
   
        // Set window properties
        set_title("GTKMM4 with CSS Example");
        set_default_size(200, 200);
        auto refBuilder= Gtk::Builder::create_from_file("K:\\VM_Shared\\temp3.ui");
        auto pButton = refBuilder->get_widget<Gtk::Button>("Button1");

        set_child(*pButton);
        pButton->set_visible();

        // Load CSS styles
        load_css();
    }

private:
    void load_css()
    {
   
        // Check if CSS file exists
        if (Glib::file_test("K:\\VM_Shared\\Style.css", Glib::FileTest::EXISTS))
        {
   
            // Create CSS provider and load CSS file
            auto css_provider = Gtk::CssProvider::create();
            css_provider->load_from_path("K:\\VM_Shared\\Style.css");
            // Get the default screen and add the CSS provider
            auto screen = Gdk::Display::get_default();
            Gtk::StyleContext::add_provider_for_display(screen, css_provider,GTK_STYLE_PROVIDER_PRIORITY_APPLICATION );
        }
        else
        {
   
            std::cerr << "Failed to load CSS file: styles.css" << std::endl;
        }
    }
};

int main(int argc, char* argv[])
{
   
    auto app=Gtk::Application::create("org.HelleCssExample");

    return app->make_window_and_run<MainWindow>(argc, argv);
}

效果

image

相关推荐

  1. 如何使用CSS样式化滚动条

    2024-02-09 20:14:03       46 阅读
  2. 使用CSS样式化占位文本

    2024-02-09 20:14:03       45 阅读
  3. gtkmm4 中检索子控件 (children)

    2024-02-09 20:14:03       48 阅读
  4. CSS样式

    2024-02-09 20:14:03       45 阅读
  5. <span style='color:red;'>css</span><span style='color:red;'>样式</span>

    css样式

    2024-02-09 20:14:03      24 阅读
  6. 使用 GPT-4 和 ChatGPT 构建应用程序

    2024-02-09 20:14:03       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-09 20:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-09 20:14:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-09 20:14:03       82 阅读
  4. Python语言-面向对象

    2024-02-09 20:14:03       91 阅读

热门阅读

  1. shell脚本之无限计时器

    2024-02-09 20:14:03       44 阅读
  2. c++小游戏整理

    2024-02-09 20:14:03       41 阅读
  3. C语言——oj刷题——实现字符串逆序

    2024-02-09 20:14:03       51 阅读
  4. OpenVPN简记

    2024-02-09 20:14:03       49 阅读
  5. Python循环语句——for循环临时变量作用域

    2024-02-09 20:14:03       56 阅读
  6. 个人搜集的gstreamer学习链接

    2024-02-09 20:14:03       50 阅读
  7. 支持向量机详解:数据的守护骑士

    2024-02-09 20:14:03       51 阅读
  8. GNU C和标准C

    2024-02-09 20:14:03       56 阅读