Start gtkmm 4 Programming (range controls)_

文章目录

  • 基础
  • 解析 Chapter 7. Range Widgets

  • https://gtkmm.org/en/documentation.html
  • https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/index.html

基础

  • 容器:
    • 容器小部件与其他小部件一样,派生自Gtk::Widget.例如Gtk::Grid可以容纳许多子小部件,因此这些小部件通常具有更复杂的接口。其他的,例如 Gtk::Frame只包含一个子部件。
    • 从技术上讲Gtk::Button,它们Gtk::Window是单项容器,
    • 大多数单项容器小部件都具有set_child() 用于unset_child()子小部件的方法, 多项容器则是append(), attach() (用于Gtk::Grid)
    • 如果区域内超过一个widget 就可以用容器box来包含他们, 这能更好的排版
  • GTK::ustring
    • 用法几乎与C++中的 string 类相同
  • 内存管理
    • 类内widget:
      #include <gtkmm/button.h>
      #include <gtkmm/window.h>
      class Foo : public Gtk::Window
      {
      private:Gtk::Button theButton;// will be destroyed when the Foo object is destroyed
      };
      
    • Dynamic allocation with make_managed() and append()
      MyContainer::MyContainer()
      {auto pButton = Gtk::make_managed<Gtk::Button>("Test");append(*pButton); //add *pButton to MyContainer
      }
      
      当类型对象MyContainer被销毁时,按钮也将被删除。不再需要删除pButton 来释放按钮的内存;它的删除已委托给该 MyContainer对象。

解析 Chapter 7. Range Widgets

  • https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-range-example.html

  • 容器大纲:
    image

    • 这些容器的第二个参数是其所包含的每个子辈widget之间的间隔(不影响孙辈)
  • 控件滑块(slider) 在gtkmm里 定义为 Gtk::Scale
    布局第一行有两个 Gtk::Scale 和一个 Gtk::Scrollbar
    它们在初始化时传的第一个参数都为 m_adjustment 是一个 Glib::RefPtr<Gtk::Adjustment> 类型, 这意味着这三个范围widget 滑动一个时会其他两个会同步滑动

  • 剩余两个Gtk::Scale 他们用的是不同的( 都为Glib::RefPtr<Gtk::Adjustment>类型 )实体对象m_adjustment_pagesize和m_adjustment_digits 他们要获取对滑动(滚动)的当前值做一些逻辑处理;

    m_adjustment_pagesize->signal_value_changed().connect(sigc::mem_fun(*this,&ExampleWindow::on_adjustment2_value_changed)
    );
    

    比如Page Size 滑块滑动时 要求修改 m_adjustment 的 page size和 page 增量, 这些会直接影响到布局第一行的三个范围控件, 可以自己调调, 看看对应关系 这也与初始化m_adjustment 时设置的值相关

    void ExampleWindow::on_adjustment2_value_changed()
    {const double val = m_adjustment_pagesize->get_value();m_adjustment->set_page_size(val);m_adjustment->set_page_increment(val);// Note that we don't have to emit the "changed" signal// because gtkmm does this for us.
    }
    
  • 其他就是按钮(值显示与否)和DropDown(设置值位置)
    Gtk::Scale 对象本身就自己维护着一个对应值, 也提供了与值有关的方法
    set_value_pos(PositionType); //设置值位置
    set_draw_value(bool); //值显示与否
    set_digits(int); //设置值精度
    事件触发函数回调写法如上;

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

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

相关文章

C++进阶--C++11新的类功能和可变参数模板

C11新的类功能和可变参数模板 一、默认成员函数二、类成员变量初始化三、强制生成默认函数的关键字default四、禁止生成默认函数的关键字delete五、继承和多态中final与override关键字六、可变参数模板的概念七、可变参数模板的定义方式八、参数包的展开方式8.1 递归展开参数包…

vue3教程,如何手动获取后端数据(入门到精通3,新人必学篇)

概述&#xff1a;没有后端数据的前端&#xff0c;就失去了灵魂&#xff0c;由于本人没有写后端数据&#xff0c;所有调用黑马的&#xff0c;往下看相信对你会有收获的。 目录 第一步&#xff1a;安装axios 第二步&#xff1a;编写后端访问地址 第三步&#xff1a;编写具体的…

如何更新github上fork的项目(需要一定git基础)

如何更新Fork的项目(需要一定git基础) 前言&#xff1a;本文记录一下自己在github上fork了大佬的开源博客项目https://github.com/tangly1024/NotionNext&#xff0c;如何使用git克隆以及自定义开发和同步合并原项目更新迭代内容的的步骤 如何更新fork的项目(进阶版) 首先你…

解决:ModuleNotFoundError: No module named ‘selenium’

解决&#xff1a;ModuleNotFoundError: No module named ‘selenium’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named selenium背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0…

数字图像处理(实践篇)三十七 OpenCV-Python 使用SIFT和BFmatcher对两个输入图像的关键点进行匹配实践

目录 一 涉及的函数 二 实践 三 报错处理 使用SIFT(尺度不变特征变换)算法

幻兽帕鲁服务器Palworld游戏怎么更新?

自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新幻兽帕鲁服务器即可解决。阿里云百科aliyunba…

git操作之本地代码修改后想回退成当前最新版本

这张图很关键&#xff0c;取自https://www.cnblogs.com/cblx/p/12467083.html 我们的vscode就是workspace&#xff0c;我们提交代码需要三步&#xff0c;add&#xff0c;commit&#xff0c;push&#xff0c;其中我们想拉取代码有两种方式&#xff0c;git pull或者git fetch/cl…

《【Python】如何设置现代 Python 日志记录 | Python 基础教程 | Python 冷知识 | 十分钟高手系列》学习笔记

《【Python】如何设置现代 Python 日志记录 | Python 基础》 2 PUT ALL HANDLERS/FILTERS ON THE ROOT&#xff1a;扁平化的设计有助于简化维护成本 5 STORE CONFIG IN JSON OR YAML FILE&#xff1a;使用配置文件可以将配置和代码解耦&#xff0c;减少代码量 日志设置示例 7 …

ubuntu 22安装配置并好安全加固后,普通用户一直登录不上

现象 ubuntu 22安装配置并好安全加固后&#xff0c;普通用户一直登录不上 排查报错 查看日志/var/log/auth.log发现报错 Jan 30 15:49:57 aiv-O-E-M sshd[62570]: PAM unable to dlopen(pam_tally2.so): /lib/security/pam_tally2.so: cannot open shared object file: No …

管理的四种风格

前言 管理的四种风格,一般的领导大概就是这几种管理模式,告知,辅导,参与,授权,还有就是乱搞式(神经病模式)。 一、告知式 告知式是指组织通过正式、明确的渠道,将信息传达给员工。这种方式通常用于传递基本的规章制度、工作流程、政策文件等。告知式的作用在于确保员…

Codeforces Round 921 (Div. 2)(A~C)

A. We Got Everything Covered! 找出一个字符串S&#xff0c;满足条件&#xff1a;所有可能的长度为n&#xff0c;使用前k个小写字母的字符串P都是S的子串。 其中字符串S的长度尽可能短。 这种构造题&#xff0c;构造S的时候尽可能在原有的基础上去扩展&#xff0c;如果能扩…

体验 AutoGen Studio - 微软推出的友好多智能体协作框架

体验 AutoGen Studio - 微软推出的友好多智能体协作框架 - 知乎 最近分别体验了CrewAI、MetaGPT v0.6、Autogen Studio&#xff0c;了解了AI Agent 相关的知识。 它们的区别 可能有人要问&#xff1a;AutoGen我知道&#xff0c;那Autogen Studio是什么&#xff1f; https://g…

pandas绘制饼图:百分比、定制标签、关闭图例、支持中文

matplotlib绘制饼图 import matplotlib.pyplot as pltplt.rc(font, family=SimHei, size=13) size = [25, 15

移动0元素

q:给定一个数组&#xff0c;将所有0元素移动到末尾&#xff0c;同时保证非0元素相对顺序 a:以下是使用Java实现将所有0元素移动到末尾&#xff0c;同时保证非0元素相对顺序的示例代码&#xff1a; public class MoveZeros {public static void moveZeros(int[] nums) {int no…

ES6 模块化、CommonJS 模块化的区别经典面试题

语法差异: ES6 模块化 使用 import 和 export 关键字来导入和导出模块。 javascriptCopy code// 导入模块 import { someFunction } from someModule; ​ // 导出模块 export function myFunction() {// code } CommonJS 模块化 使用 require 和 module.exports 或 exports 来导…

C++_list

目录 一、模拟实现list 1、list的基本结构 2、迭代器封装 2.1 正向迭代器 2.2 反向迭代器 3、指定位置插入 4、指定位置删除 5、结语 前言&#xff1a; list是STL(标准模板库)中的八大容器之一&#xff0c;而STL属于C标准库的一部分&#xff0c;因此在C中可以直接使用…

30个常用的lodash工具函数

chunk: 将数组拆分成指定大小的多个数组 function chunk(array, size) {const result [];for (let i 0; i < array.length; i size) {result.push(array.slice(i, i size));}return result; }compact: 过滤数组中的假值&#xff08;false、null、0、“”、undefined 和…

制作ubuntu-base-23.10-base-armhf的根文件系统rootfs

1、创建一台同版本的ubuntu23的虚拟机 2、下载 ubuntu-base-23.10-base-armhf.tar.gz 3、上传到虚拟机里&#xff0c;解压到rootfs文件夹下 tar -xf /opt/ubuntu-base-23.10-base-armhf.tar.gz -C /opt/rootfs4、安装 qemu&#xff0c;对任何机器运行操作系统的全系统仿真。…

npm 淘宝镜像正式到期

由于node安装插件是从国外服务器下载&#xff0c;如果没有“特殊手法”&#xff0c;就可能会遇到下载速度慢、或其它异常问题。 所以如果npm的服务器在中国就好了&#xff0c;于是我们乐于分享的淘宝团队干了这事。你可以用此只读的淘宝服务代替官方版本&#xff0c;且同步频率…

AsyncLocal是如何实现在Thread直接传值的?

一&#xff1a;背景 1. 讲故事 这个问题的由来是在.NET高级调试训练营第十期分享ThreadStatic底层玩法的时候&#xff0c;有朋友提出了AsyncLocal是如何实现的&#xff0c;虽然做了口头上的表述&#xff0c;但总还是会不具体&#xff0c;所以觉得有必要用文字图表的方式来系统…