gtkmm4 应用程序使用 CSS 样式

文章目录

  • 前言
  • css选择器
  • 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 propertiesset_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 stylesload_css();}private:void load_css(){// Check if CSS file existsif (Glib::file_test("K:\\VM_Shared\\Style.css", Glib::FileTest::EXISTS)){// Create CSS provider and load CSS fileauto css_provider = Gtk::CssProvider::create();css_provider->load_from_path("K:\\VM_Shared\\Style.css");// Get the default screen and add the CSS providerauto 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461944.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘计算初创公司ZEDEDA获7200万美元C轮融资,助力边缘计算市场扩张!

边缘计算领域传来喜讯&#xff01; 边缘计算社区获悉&#xff0c;就在昨天&#xff08;2月7日&#xff09;&#xff0c;边缘计算企业ZEDEDA成功募集7200万美元C轮融资&#xff0c;折合人民币高达约5.18亿元。据悉&#xff0c;此次融资使ZEDEDA的估值飙升至4亿美元&#xff0c;相…

《低功耗方法学》翻译——附录B:UPF命令语法

附录B&#xff1a;UPF命令语法 本章介绍了文本中引用的所选UPF命令的语法。 节选自“统一电源格式&#xff08;UPF&#xff09;标准&#xff0c;1.0版”&#xff0c;经该Accellera许可复制。版权所有&#xff1a;(c)2006-2007。Accellera不声明或代表摘录材料的准确性或内容&…

【03】C++ 类和对象 2:默认成员函数

文章目录 &#x1f308; 前言&#x1f308; Ⅰ 构造函数1. 构造函数概念2. 构造函数特性3. 初始化列表 &#x1f308; Ⅱ 析构函数1. 析构函数概念2. 析构函数特性 &#x1f308; Ⅲ 拷贝构造1. 拷贝构造概念2. 拷贝构造特性3. 深度拷贝构造 &#x1f308; Ⅳ 赋值重载1. 运算符…

【LeetCode每日一题】525连续数组 303区域和检索(前缀和的基本概念和3个简单案例)

前缀和 // 构造prefix let prefix [0] arr.forEach(num > {prefix.push(prefix.at(-1) num); })如果想要计算某个区间 i 到 j 这个子数组的和时&#xff0c;可以根据 prefix[j1] - prefix[i] 获得。 例题1&#xff1a;303.区域和检索 - 数组不可变 给定一个整数数组 num…

3分钟部署完成Docker Registry及可视化管理工具Docker-UI

安装docker-registry 由于镜像文件会非常占用空间&#xff0c;因此需要选择一个磁盘充裕的位置来存放镜像数据。 这里设置为&#xff1a;-v /data/registry:/var/lib/registry&#xff0c;其中/data/registry是宿主机存放数据的位置。 docker run -d -p 5000:5000 --restart…

龙芯开启ssh服务——使用Putty连接

本文采用龙芯3A6000处理器&#xff0c;Loongnix操作系统。 为了能使用其他电脑远程操控龙芯电脑&#xff0c;需要打开loongnix的ssh服务&#xff0c;并在其他电脑里使用putty连接loongnix。 1 修改ssh配置文件 命令行输入&#xff1a; sudo vim /etc/ssh/sshd_config按下i插…

JetpackCompose之状态管理

JetPack Compose系列&#xff08;13&#xff09;—状态管理 State 即&#xff0c;状态。官方的解释是&#xff1a; State in an application is any value that can change over time. And ****event can notify a part of a program that something has happened. 可以这样…

Linux版Black Basta勒索病毒针对VMware ESXi服务器

前言 Black Basta勒索病毒是一款2022年新型的勒索病毒&#xff0c;最早于2022年4月被首次曝光&#xff0c;主要针对Windows系统进行攻击&#xff0c;虽然这款新型的勒索病毒黑客组织仅仅才出来短短两个多月的时间&#xff0c;就已经在其暗网平台上已经公布了几十个受害者之多&…

消息中间件:Puslar、Kafka、RabbigMQ、ActiveMQ

消息队列 消息队列&#xff1a;它主要用来暂存生产者生产的消息&#xff0c;供后续其他消费者来消费。 它的功能主要有两个&#xff1a; 暂存&#xff08;存储&#xff09;队列&#xff08;有序&#xff1a;先进先出 从目前互联网应用中使用消息队列的场景来看&#xff0c;…

小项目:蓝牙模块点亮RGB三色灯

在之前的教程中&#xff0c;我们学习了蓝牙模块的原理&#xff0c;并动手写了驱动&#xff0c;实现了串口的接收和发送。本次我们就来教大家如何使用蓝牙串口控制灯。这是一个简单的示例&#xff0c;展示了如何将蓝牙通信与硬件控制相结合&#xff0c;实现远程控制的功能。你也…

机器学习系列——(十九)层次聚类

引言 在机器学习和数据挖掘领域&#xff0c;聚类算法是一种重要的无监督学习方法&#xff0c;它试图将数据集中的样本分组&#xff0c;使得同一组内的样本相似度高&#xff0c;不同组间的样本相似度低。层次聚类&#xff08;Hierarchical Clustering&#xff09;是聚类算法中的…

战略规划的重要性及撰写步骤

当新的季度或财年到来的时候&#xff0c;团队需要确定首要开始的工作内容&#xff0c;但团队成员对于应优先处理的事务很多时候都持有不同观点&#xff0c;每个人都认为自己的任务应该被优先考虑&#xff0c;这种决策过程耗费了大量时间&#xff0c;以至于团队经常推迟计划的开…