首页 > 编程语言 >gtkmm4 应用程序使用 CSS 样式

gtkmm4 应用程序使用 CSS 样式

时间:2024-02-08 20:12:41浏览次数:28  
标签:load gtkmm4 color 应用程序 css provider 选择器 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

标签:load,gtkmm4,color,应用程序,css,provider,选择器,CSS
From: https://www.cnblogs.com/ComputerTech/p/18012066

相关文章

  • [css] SVG的使用
    使用svg代替iconfont的好处:iconfont无法显示复杂的图形;svg是矢量图;svg标签内部可以添加title和desc标签,有利于SEO和无障碍阅读。svgsprite图:将若干个svg图标组合到一个文件上,可以减少网络请求的次数,通过#获取指定的图标:<svgclass="icon"><usexlink:href="img/sprit......
  • [CSS] 渐进增强与优雅降级
    渐进增强和优雅降级含义渐进增强:先针对低级浏览器保证基本功能,再针对高级浏览器追加功能;优雅降级:针对那些最高级、最完善的浏览器来设计网站,一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。@supports使用@supports可以查询相关的声明是否能被浏览器支持,然后后续可......
  • [CSS] 渐进增强与优雅降级
    渐进增强和优雅降级含义渐进增强:先针对低级浏览器保证基本功能,再针对高级浏览器追加功能;优雅降级:针对那些最高级、最完善的浏览器来设计网站,一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。@supports使用@supports可以查询相关的声明是否能被浏览器支持,然后后续可......
  • [CSS] 渐进增强与优雅降级
    渐进增强和优雅降级含义渐进增强:先针对低级浏览器保证基本功能,再针对高级浏览器追加功能;优雅降级:针对那些最高级、最完善的浏览器来设计网站,一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。@supports使用@supports可以查询相关的声明是否能被浏览器支持,然后后续可......
  • 【译】宣布推出适用于 .NET 的 Azure Migrate 应用程序和代码评估工具
    原文|OliaGavrysh翻译|郑子铭我们很高兴地宣布发布一款新工具,可以帮助您将本地.NET应用程序迁移到Azure。适用于.NET的AzureMigrate应用程序和代码评估工具(简称AppCAT)允许你评估应用程序的.NET源代码、配置和二进制文件,以识别将应用程序迁移到Azure时的潜在......
  • [CSS] 级联与特异性
    样式表IMPORTANCE比较优先级由上往下递减,如果重要性一致,则对比选择器的特异性Specificity,也叫“具体程度”.用户声明的!important作者声明的!important作者样式表用户样式表浏览器默认样式表特异性Specificity当有多条冲突的CSS规则指向同一元素,则浏览器会计算特异性......
  • REACT 里面的css文件style不显示
    问题现象在App.jsx同路径下的App.css定义中的style不显示,被上面的样式覆盖了。(使用vite创建的REACTapp)分析点击目前应用的样式右上角的style图标定位到,现在的样式是由引入的bootstrap.css定义的,可看到网页html中自定义css在bootstrap.css上面。由于javascript是从上到下编......
  • (五)ADO.NET用窗体应用程序写增删查改(1.1升级版)
    在上一节我们写了一个简单的窗体应用程序增删查改,但只是限制于只能单条增加、修改、删除、查询,今天继续修改代码,让增加这个环节由用户自行输入然后增加。首先新增一个窗体,把数据库表中所需要的字段排版好。一、原“增加”按钮修改紧接着上一节项目,我们只需要把修改按钮事件修......
  • "Fault Tolerant Heap"(FTH)是Windows操作系统的一个特性,旨在提高应用程序的稳定性 自动
    "FaultTolerantHeap"(FTH)是Windows操作系统的一个特性,旨在提高应用程序的稳定性。它首次出现在Windows7和WindowsServer2008R2中,作为操作系统的一部分,用于自动检测和修正某些类型的应用程序错误,从而减少应用程序崩溃的频率。FTH的工作原理当应用程序频繁崩溃时,FTH会自动介......
  • nginx改变访问应用端口以及解决css,js或表单提交访问不到的问题
    场景如果原先某个网站是通过ip:8080直接访问的,现在想要加个前缀,并且去掉端口进行访问,比如ip/myapp去访问这个项目,可以通过nginx来实现这个过程。最近有个需求需要变更redmine的访问路径,从ip:8080改成ip/redmine,下面以redmine举例子。配置过程以ip/redmine来访问原先ip:8080的项......