多 split 窗口 in Gtkmm4

文章目录

  • 效果预览
  • 实现概要
  • 源代码

效果预览

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);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二阶系统的迹-行列式平面方法(trace-determinant methods for 2nd order system)

让我们再次考虑二阶线性系统 d Y d t A Y \frac{d\mathbf{Y}}{dt}A\mathbf{Y} dtdY​AY 我们已经知道&#xff0c;分析这种二阶系统。最主要的是注意它的特征值情形。 &#xff08;此处没有重根的情形&#xff0c;所有是partial&#xff09; 而特征值&#xff0c;也就是系…

Amazon Dynamo学习总结

目录 一、Amazon Dynamo的问世 二、Amazon Dynamo主要技术概要 三、数据划分算法 四、数据复制 五、版本控制 六、故障处理 七、成员和故障检测 一、Amazon Dynamo的问世 Amazon Dynamo是由亚马逊在2007年开发的一种高度可扩展和分布式的键值存储系统&#xff0c;旨在解…

基于Python的HTTP隧道安全性分析:魔法背后的锁与钥匙

当我们谈论基于Python的HTTP隧道时&#xff0c;不禁让人想起那些神秘的魔法门。但是&#xff0c;在魔法背后&#xff0c;我们也需要确保安全性&#xff0c;就像需要确保魔法不会落入邪恶之手一样。那么&#xff0c;基于Python的HTTP隧道在安全性方面表现如何呢&#xff1f;让我…

JPEG图像格式加速神经网络训练--使用DCT训练CNN

JPEG图像格式加速神经网络训练 JPEG图像格式加速神经网络训练工作原理DCT系数与JPEG直接利用DCT系数阶段 1: 数据准备步骤 1: 读取JPEG文件结构步骤 2: 提取量化表和Huffman表步骤 3: 解析图像数据步骤 4: 反量化步骤 5: 获取DCT系数 阶段 2: 输入处理预处理 1: 正规化&#xf…

轻薄型工业平板亿道EM-T195,续航持久高达10小时

时尚而坚固的 10.1英寸EM-T195触摸屏平板电脑融合了高耐力和无与伦比的适应性&#xff0c;可抵御极端天气条件和多重冲击&#xff0c;借助强大的联发科8核处理器&#xff0c;它可以从容面对任何工作挑战。 其读取能力&#xff08;2D 成像器&#xff09;结合其坚固性&#xff0…

波奇学Linux: 文件描述符

文件和操作系统的关系 操作系统控制进程&#xff0c;文件的打开是在进程中进行。意味着用来控制进程的PCB必然有文件的信息&#xff0c;操作系统通过控制PCB的信息来控制文件的读写。 Q1&#xff1a;如何证明文件打开是在进程中进行&#xff1f; 编写c文件调用fopen来操作文件…

数据结构——单向链表和双向链表的实现(C语言版)

目录 前言 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 2. 单链表接口实现 2.1 数据结构设计与接口函数声明 2.2 创建结点&#xff0c;打印&#xff0c;查找 2.3 尾插&#xff0c;头插&#xff0c;尾删&#xff0c;头删 2.4 插入或删除 2.4.1在指定位置后 2.4.2在…

OpenCV-34 顶帽操作和黑帽操作

一、顶帽操作&#xff08;TOPHAT&#xff09; 顶帽 原图 - 开运算 开运算的效果是去除图像外的噪点&#xff0c;因此原图 - 开运算就得到了去掉的噪点。 通过API --- morphologyEx&#xff08;img&#xff0c; MORPH_TOPHAT&#xff0c; kernel&#xff09; 示例代码如下&…

C++基础知识点预览

一.绪论&#xff1a; 1.1 C简史&#xff1a; 与C的关系&#xff1a; 被设计为C语言的继任者&#xff0c;C语言是一种过程型语言&#xff0c;程序员使用它定义执行特定操作的函数&#xff0c;而C是一种面向对象的语言&#xff0c;实现了继承、抽象、多态和封装等概念。C支持类&…

Spring Boot 笔记 004 自动配置和自定义starter

003讲到了导入jar包中的方法&#xff0c;但其实是个半成品&#xff0c;别人写的jar包中的方法我要在自己的代码中去调用&#xff0c;非常的不方便。原则上写给别人用的jar包&#xff0c;人家要能直接用&#xff0c;而不用写注入的方法。 在springboot中会自动扫描imports文件中…

【FFmpeg】ffplay 命令行参数 ⑤ ( 设置音频滤镜 -af 参数 | 设置统计信息 -stats 参数 | 设置同步时钟类型 -sync 参数 )

文章目录 一、ffplay 命令行参数 - 音频滤镜1、设置音频滤镜 -af 参数2、常用的 音频滤镜 参数3、音频滤镜链 示例 二、ffplay 命令行参数 - 统计信息1、设置统计信息 -stats 参数2、关闭统计信息 -nostats 参数 三、ffplay 命令行参数 - 同步时钟类型1、设置同步时钟类型 -syn…

从Socket中解析Http协议实现通信

在网络协议中&#xff0c;Socket是连接应用层和运输层的中间层&#xff0c;主要作用为了通信。Http协议是应用层上的封装协议。我们可以通过Http协议的规范解析Socket中数据&#xff0c;完成Http通信。 首先&#xff0c;我们先回顾一下Http协议的规范。主要复习一下&#xff0c…

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…

【web前端开发】HTML及CSS简单页面布局练习

案例一 网页课程 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

Linux中ps/kill/execl的使用

ps命令&#xff1a; ps -aus或者ps -ajx或者 ps -ef可以查看有哪些进程。加上 | grep "xxx" 可以查看名为”xxx"的进程。 ps -aus | grep "xxx" kill命令&#xff1a; kill -9 pid 杀死某个进程 kill -l 查看系统有哪些信号 execl函数&#…

在Ubuntu上部署Stable Video Diffusion动画制作

Stable Diffusion团队推出的开源模型Stable Video Diffusion&#xff0c;支持生成约3秒的视频&#xff0c;分辨率为5761024。通过测试视频展示了其令人瞩目的性能&#xff0c;SVD模型是一个生成图像到视频的扩散模型&#xff0c;通过对静止图像的条件化生成短视频。其特点主要包…

Vue源码系列讲解——虚拟DOM篇【三】(更新子节点)

1. 前言 在上一篇文章中&#xff0c;我们了解了Vue中的patch过程&#xff0c;即DOM-Diff算法。并且知道了在patch过程中基本会干三件事&#xff0c;分别是&#xff1a;创建节点&#xff0c;删除节点和更新节点。创建节点和删除节点都比较简单&#xff0c;而更新节点因为要处理…

使用cocos2d-console初始化一个项目

先下载好cocos2d-x的源码包 地址 https://www.cocos.com/cocos2dx-download 这里使用的版本是 自己的电脑要先装好python27 用python安装cocos2d-console 看到项目中有个setup.py的一个文件 python setup.py 用上面的命令执行一下。 如果执行正常的话回出现上面的图 然后…

教师如何找答案? #知识分享#职场发展

当今社会&#xff0c;随着信息技术的迅猛发展&#xff0c;大学生们在学习过程中面临着各种各样的困难和挑战。而在这些挑战中&#xff0c;面对繁重的作业和复杂的题目&#xff0c;大学生搜题软件应运而生 1.快解题 这是一个网站 是一款服务于职业考证的考试搜题软件,拥有几千…

CVE-2018-19518 漏洞复现

CVE-2018-19518 漏洞介绍 IMAP协议&#xff08;因特网消息访问协议&#xff09;它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息&#xff0c;下载邮件等。它运行在TCP/IP协议之上&#xff0c;使用的端口是143。在php中调用的是imap_open函数。 PHP 的…