当前位置: 首页 > news >正文

gtkmm4 应用程序使用 CSS 样式

文章目录

  • 前言
  • css选择器
  • css文件示例
  • 源代码
  • 效果
  • 动态设置css-classes

前言

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

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

动态设置css-classes

auto button1 = Gtk::make_managed<Gtk::Button>("bottom button");
button1->set_expand();
button1->get_style_context()->add_class("custom_button");
http://www.lryc.cn/news/298348.html

相关文章:

  • 科研绘图-半小提琴图-
  • 机器学习 | 深入集成学习的精髓及实战技巧挑战
  • SNMP(简单网络管理协议)介绍
  • Spring中常见的设计模式
  • 【MySQL】——数值函数的学习
  • LLMs模型选择,LLMs复读机问题,LLMs长文本处理方案
  • LeetCode.144. 二叉树的前序遍历
  • Redis复制
  • C++入门学习(二十七)跳转语句—break语句
  • Spark安装(Yarn模式)
  • 1.4 Binance_interface API U本位合约行情
  • 单片机学习笔记---AT24C02(I2C总线)
  • c++恶魔轮盘制造第1期输赢
  • 60-JS-Ajax
  • C# Avalonia 折线图
  • Vue3中Setup概述和使用(三)
  • hexo 博客搭建以及踩雷总结
  • WordPress后台编辑个人资料页面直接修改用户名插件Change Username
  • ssm+vue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
  • LLM大模型基本概念,及其相关问题汇总(1)
  • 【已解决】pt文件转onnx后再转rknn时得到推理图片出现大量锚框变花屏
  • DevOps文章之 操作手册用户使用说明书
  • 【RT-DETR进阶实战】利用RT-DETR进行视频划定区域目标统计计数
  • 2.11学习总结
  • 以谷歌浏览器为例 讲述 JavaScript 断点调试操作用法
  • Vue前端框架--Vue工程项目问题总结{脚手架 Vue-cli}
  • Unity2D 学习笔记 0.Unity需要记住的常用知识
  • vue3-应用规模化-单文件组件
  • Redis -- 渐进式遍历
  • 使用 C++23 从零实现 RISC-V 模拟器(3):指令解析