gtkmm4 应用程序使用 CSS 样式

文章目录

前言

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

css选择器

  • Cambalache提供了两种

  • css-classes 相当于css里的类名:class="类名"

  • css-name 相当于css里的标签名:spin div p 啥的

  • 如上我设置了这个按钮控件的类名为testButton
    标签名为myButton

  • 它的Xml视图是这样的

    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文件示例

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

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

源代码

cpp 复制代码
#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);
}

效果

相关推荐
南雨北斗3 分钟前
wangeditor5 在vue3项目中的正确配置
前端
Cache技术分享5 分钟前
517. Java 方法句柄 - 方法句柄 vs 反射 API
前端·后端
小刘在重生~6 分钟前
Web 前端基础|HTML+CSS+JavaScript+Bootstrap
前端·css·html
吴长建先生重名了9 分钟前
如何撩妹子实战:搞定StackTrace,面试必问的底层逻辑
css
是立不是利11 分钟前
第二篇:CSS 与用户体验——看不见的设计
前端·css·ux
打呵欠的猫16 分钟前
我把 20 个页面的权限控制从"硬编码"改成"配置驱动",AI 帮我生成了 80% 的迁移代码
前端·ai编程
志尊宝29 分钟前
Vue3 零基础每日笔记(005):ref 响应式基础——为什么 script 里要 .value
前端·javascript·vue.js·笔记
海鸥两三34 分钟前
Mac电脑使用 Tabby 部署前端项目到阿里云服务器完整教程
前端·macos·阿里云
console.log('npc')42 分钟前
2026 实测:Grok 4.5 与 Grok 4.6 怎么选?前端开发、教程写作、Figma 还原选型指南
前端·大模型·ai编程·figma·grok
yyt3630458411 小时前
一次鼠标交互触发两次 Vue flushJobs:把高频交互从 VDOM 里拆出来
前端·vue.js·计算机外设