多 split 窗口 in Gtkmm4

Linux Swap 子系统:架构、内存管理与虚拟化 Swap Linux Swap机制通过将不活跃内存页移至磁盘或压缩内存,扩展系统有效内存容量,缓解内存压力。传统架构中,逻辑Swap槽与物理存储绑定,导致资源浪费,尤其在使用Zswap等压缩技术时。为此,Vswap与Xswap提出虚拟化方案:前者以XArray实现灵活映射,支持多后端迁移;后者采用稀疏映射,简化管理但容量固定。二者在架构设计、资源记账与动态扩展上各有权衡,反映了内核开发中对性能、可维护性与灵活性的深层考量。 阅读详情

效果预览

image

实现概要

  • 使用Gtk::Paned
  • 虽然 Paned 只能装两个子控件, 但是我可以嵌套
    paned1 装 box1 和 box2
    paned2 装 paned1 和 box3

源代码

#include <gtkmm.h>
class ExampleWindow : public Gtk::Window
{
public:
    ExampleWindow()
    {
        // 设置窗口标题
        set_title("GTKMM 4 Vertical Multi-Pane Example");

        // 创建框,用于放在分割窗口中
        auto box1 = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL,10);
        auto box2 = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL,10);
        auto box3 = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL,10);


        auto pLabel1 = Gtk::make_managed<Gtk::Label>("This is Box 1");
        box1->append(*pLabel1); //add *pButton to MyContainer
        auto pLabel2 = Gtk::make_managed<Gtk::Label>("This is Box 2");
        box2->append(*pLabel2); //add *pButton to MyContainer
        auto pLabel3 = Gtk::make_managed<Gtk::Label>("This is Box 3");
        box3->append(*pLabel3); //add *pButton to MyContainer
        // 添加一些控件到框中


        // 创建第一个垂直分割窗口
//        Gtk::Paned vpane1;
        auto vpane1 = Gtk::make_managed<Gtk::Paned>();
        vpane1->set_start_child(*box1);
        vpane1->set_end_child(*box2);
        vpane1->set_shrink_end_child(false);
    	vpane1->set_shrink_start_child(false);
        // 创建第二个垂直分割窗口,并将第一个分割窗口和第三个框放入其中
        auto vpane2 = Gtk::make_managed<Gtk::Paned>();

        vpane2->set_start_child(*vpane1);
        vpane2->set_end_child(*box3);
        vpane2->set_shrink_end_child(false);
    	vpane2->set_shrink_start_child(false);
        // 设置初始分割位置
        vpane1->set_position(100); // 第一个分割窗口的位置
        vpane2->set_position(200); // 第二个分割窗口的位置

        // 将第二个分割窗口添加到主窗口中
          this->set_child(*vpane2);
    }
};

int main(int argc, char *argv[])
{
    auto app = Gtk::Application::create("org.gtkmm.example");
    // 显示窗口
    return app->make_window_and_run<ExampleWindow>(argc, argv);
}

也可以换种写法 都差不多

#include <gtkmm.h>
Glib::RefPtr<Gtk::Application> app = nullptr;
class ExampleWindow : public Gtk::Window
{
public:
    ExampleWindow()
    {
        // 设置窗口标题
        set_title("GTKMM 4 Vertical Multi-Pane Example");

        // 创建框,用于放在分割窗口中
        auto box1 = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL,10);
        auto box2 = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL,10);
        auto box3 = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL,10);


        auto pLabel1 = Gtk::make_managed<Gtk::Label>("This is Box 1");
        box1->append(*pLabel1); //add *pButton to MyContainer
        auto pLabel2 = Gtk::make_managed<Gtk::Label>("This is Box 2");
        box2->append(*pLabel2); //add *pButton to MyContainer
        auto pLabel3 = Gtk::make_managed<Gtk::Label>("This is Box 3");
        box3->append(*pLabel3); //add *pButton to MyContainer
        // 添加一些控件到框中


        // 创建第一个垂直分割窗口
//        Gtk::Paned vpane1;
        auto vpane1 = Gtk::make_managed<Gtk::Paned>();
        vpane1->set_start_child(*box1);
        vpane1->set_end_child(*box2);

        // 创建第二个垂直分割窗口,并将第一个分割窗口和第三个框放入其中
        auto vpane2 = Gtk::make_managed<Gtk::Paned>();

        vpane2->set_start_child(*vpane1);
        vpane2->set_end_child(*box3);
        // 设置初始分割位置
        vpane1->set_position(100); // 第一个分割窗口的位置
        vpane2->set_position(200); // 第二个分割窗口的位置

        // 将第二个分割窗口添加到主窗口中
          this->set_child(*vpane2);
    }
};
void On_app_activate(){
    auto EXWindow= Gtk::make_managed<ExampleWindow>();
    app->add_window(*EXWindow);
    EXWindow->set_visible();
}
int main(int argc, char *argv[])
{
   app = Gtk::Application::create("org.gtkmm.example");
    // 显示窗口
    app->signal_activate().connect([] ()
                                      {
                                          On_app_activate();
                                      });
    return app->run(argc, argv);
}
AUTO-DL平台快速部署BEVFormer:Nuscenes数据集完整训练避坑指南 本文详细介绍了在AUTO-DL平台高效部署BEVFormer模型并利用Nuscenes数据集进行完整训练的实战指南。重点解析了平台数据管理、环境配置、数据集迁移解压、预处理及训练启动等全流程中的关键步骤与常见避坑技巧,帮助研究者和工程师快速复现这一前沿视觉感知模型,节省云端训练时间与成本。 阅读详情

相关推荐

maya后台批量比对maya文件层级

在cg制作过程中,为了统一制作规范,提高效率我们Pipeline都会制作一个比对层级的工具下面介绍的是maya利用batch文件进行模型与绑定和材质文件进行比对层级。 直接上代码: #!usr/bin/env python # -*- encoding: utf-8 -*- """ @author:MCC @file: compareUI @time: 2018/11/21 16:29 """ i...

CGpipelineTD 1641

gtk / gtkmm学习记录

gtk

随手写下笔记和感悟 1475

【MMDetection3.0实战】从零构建自定义数据集训练流程

本文详细介绍了使用MMDetection3.0框架从零开始构建自定义目标检测数据集的完整训练流程。内容涵盖环境配置、COCO格式数据准备、核心代码改造、模型配置与训练策略调优,以及最终的模型测试与验证,帮助开发者快速上手并训练自己的检测模型。

l6m7n8的博客 313

GTKmm 練習筆記(一)關於BOX容器的應用

gtkmm的GUI開發上最大的困難點在於文檔與範例稀少,學習的來源有限,故在自己學習的路上希望能做些筆記, 如果尚不知道如何架設環境的朋友可以看我的另一篇文章,"gtkmm環境架設筆記"。 這一系列筆記一方面為了強化自己的記憶,另一方面給有興趣一同研究這套跨平台GUI庫的同好一點參考的來源。 這次主要紀錄練習關於BOX容器的應用,範例檔來自於gtkmm開發團隊在github上的box容器範例

shengchikuo的博客 463

SAP MM采购合同创建全解析:ME31K操作与后台逻辑

在SAP ERP的物料管理模块中,采购合同作为框架协议的核心,定义了企业与供应商之间的长期供货关系。它与采购订单不同,合同不直接产生收货或发票,而是为后续采购订单提供数据源。创建合同(事务码ME31K)时,需要区分数量合同与金额合同,并维护抬头、行项目、有效期、价格条件和税码等关键信息。SAP通过源确定机制在创建采购订单时自动匹配合同,同时审批策略、编码范围和输出类型也会影响合同的实际可用性。掌握合同创建逻辑,能有效解决采购订单无法带出合同、审批未触发、价格缺失等高频问题。从ME31K实操出发,系统梳理采购

weixin_30000735的博客 196

Elsevier投稿别再踩坑了!手把手教你搞定LaTeX模板和所有附件(附避坑清单)

本文详细解析Elsevier投稿全流程中的关键环节,特别是LaTeX模板的使用和系统提交的常见问题。从必备文件准备到LaTeX模板适配,再到投稿系统操作指南,提供全面的避坑清单和实用技巧,帮助科研工作者高效完成投稿,避免因格式错误或文件遗漏导致的退稿风险。

weixin_30915275的博客 551

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 329

LearningToRank(LTR)排序算法LGBMRanker的原理和使用

1. 写在前面 在最近新闻推荐的比赛中, 接触到了一个排序模型LGBMRanker, 该模型与普通的分类模型LGBMClassifier不太一样, 普通的分类模型在进行推荐的时候, 往往是先预测某个商品或者文章用户会不会点击, 也就是它的目标是预测用户点击某篇文章或者某个商品的概率, 然后根据这个概率值进行排序, 排完之后,把最靠前的几个返回回来给用户进行推荐。 而LGBRanker模型, 它不关心用户点击某篇文章的概率, 而是根据用户点击或者不点击的这个行为, 直接去预测最后商品或者文章的一个相对顺序,

Miracle8070 1万+

Linux 磁盘满了怎么排查?df / du / find 三步定位大文件

Linux 磁盘满排查三步法:df -h 定位分区、du 逐层下钻、find 按大小和时间抓大文件,附 inode 耗尽、文件已删未释放、du 与 df 不一致等经典坑的解决方案。

weixin_38291577的博客 218

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

weixin_45735391的博客 3万+

遗传算法(GA)全面解析:从生物基础到工程实践

本文全面解析了遗传算法(GA),从其生物基础到工程实践应用。遗传算法模拟自然进化过程,通过选择、交叉和变异等操作在解空间中高效搜索最优解。文章详细介绍了算法的生物学基础(达尔文进化论、孟德尔遗传定律)、基本概念(种群、个体、基因等)和核心思想。重点阐述了遗传算法的数学模型,包括编码机制、适应度函数设计、遗传算子(选择、交叉、变异)以及关键控制参数。最后提供了一个完整的Python实现示例,展示了遗传算法求解函数最大值问题的具体应用。该算法具有群体搜索、概率导向、无需梯度等特点,适用于各类复杂优化问题。

qq_42212808的博客 1175

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 95

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 209

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 287

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 208

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 240

Linux sudo

如果输出 → 无 sudo 权限 如果输出 → 拥有全部 sudo 权限 辅助验证命令 ⚠️ 注意:在 wheel 组 ≠ 一定能 sudo,必须 开启 Ubuntu/Debian: ✅ 重要:修改组之后,用户要重新登录才生效! 或者执行 临时生效 看到这行(没有 #注释)才生效: 方式 2:visudo 直接单独给用户授权(精细化权限) 找到 ,下面添加一行: 自带语法校验,写错会告警,不要直接 vim 改 ,写错直接 sudo 炸掉! 想免密 su

fengliyang_的博客 176

Linux 磁盘 100% 但 du 查不出东西,五种情况逐个排

监控告警说根分区 100%,登录上去 du -sh /* 加起来只有 12GB,df 显示 40GB 已用。差了快 30GB,du 找不到任何东西。这种情况基本都是"文件被删了但进程还开着",但也可能是别的原因。这篇按可能性排一下顺序。

2408_89646393的博客 163

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 180

Linux 网络基础详解:IP、子网、路由与 ip、ss 命令实战

建库建表、增删改查、连接查询(内连左连右连)、聚合函数、权限控制 GRANT/REVOKE,每条命令配可运行示例,零基础也能跟着敲会 SQL 基础。

2502_91473995的博客 610

Linux 下 OpenCode 接入自定义大模型 API 教程:以 DeepSeek-V4.1-Flash-1017 为例

本文介绍在Linux下通过Python脚本配置OpenCode接入自定义大模型API(以DeepSeek-V4.1-Flash-1017为例),实现永久化、非侵入式配置。通过修改~/.config/opencode/opencode.json文件,添加OpenAI兼容服务商BLSC,注册模型并设置APIKey。支持命令行测试、默认模型设定及安全权限控制,操作简单且不影响原有配置。适用于各类支持OpenAI接口的自定义模型服务,提升开发灵活性与安全性。

qq_15060477的博客 121

【Linux 命令实战(02):文件与目录操作,掌握 pwd、ls、cd 三个核心命令】

命令作用cd /进入根目录cd ~进入当前用户家目录cd返回当前用户家目录cd …返回上一级目录cd …/…返回上两级目录cd -返回上一次所在目录进入指定目录命令核心用途常用参数pwd查看当前目录-L、-Pls查看文件和目录cd切换目录…、~、-Linux 文件系统的基本结构。绝对路径与相对路径的区别。Tab 自动补全。Shell 通配符。使用&&组合命令。这篇文章主要解决的是如何在 Linux 文件系统中快速定位目录。

一些微不足道的见解、希望能帮助各位 190

Linux Day29——HTTP与网络排障

*实测**:`traceroute -n -m 8 8.8.8.8` 的输出:第 1 跳 `172.17.144.1`(本机网关)、第 2 跳 `10.32.0.1`、第 3 跳 `10.50.255.253`、第 4 跳 `* * *`、第 5 跳 `221.226.71.193`、第 6 跳 `* * *`、第 7、8 跳有地址但夹着星号。`ping` 和 `traceroute` 都靠它。**实测**:`ss -lta` 看到三行 `domain`,加 `-n` 后变成 `53`。

2503_94114317的博客 151

【Linux】进程间通信的基础概念及基于匿名管道的进程池

前面我们介绍了进程的创建、退出和等待,接下来看看进程之间怎样传递数据。这篇从匿名管道入手,再用管道把父子进程联系起来,写一个简单的进程池小demo。而且我把发行版从CentOS切换成Ubuntu了,主要是CentOS已经不维护了,可惜了。。。

qeen87的博客 315

Linux的渲染与显示系统链路

Linux渲染与显示链路核心为DRM/KMS + EGL直连模式,绕过传统X11/Wayland中间层,实现低延迟、高效率的直接帧提交。相比X11的粗粒度权限控制与Wayland的合成开销,该方案链路短、资源消耗低,但仅支持单进程独占显示,缺乏窗口管理与系统级兜底。EGL作为跨平台桥梁,连接OpenGL ES与原生显示系统,通过Display、Surface、Context三要素构建渲染环境。内核层DRM管理GPU资源,KMS配置显示模式,用户态GDM负责登录会话,共同构成从硬件到应用的完整图形栈。

微小的鱼的博客 204

Linux 启动流程与故障修复:GRUB、systemd 与救援模式实战

密钥登录配置替代密码、sshd_config 禁 root 禁密码改端口、fail2ban 自动封爆破 IP、端口改不改的权衡,服务器被扫描爆破时的完整加固方案。

2502_91473995的博客 457
上一篇: gtkmm 与 Cambalache 与 Gtk::Builder (新手向)_
下一篇: gtkmm4 应用程序使用 CSS 样式
Computer_Tech
博客等级 码龄3年 573粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值