1. pick gtk dll 程序的制作

文章目录

  • 前言
  • 预览
  • 细节要点
    • 初始窗口尺寸
    • 提示音
    • 快速提示信息对话框AlertDialog
    • 鼠标移入移出事件
    • 布局与父子控件关系
    • 图片
  • 后续
  • 源码及资源

前言

  • 在之前的打包测试中我提到了需要一个挑选dll的程序
  • 于是我打算用Gtk来制作这个程序

预览

image

细节要点

初始窗口尺寸

  • 只有主窗口有set_default_size()方法, 控件没有这个方法
  • 我发现Gtk的初始窗口大小和最小窗口大小限制 集合在同一个方法内:
    set_size_request()
  • 这就有问题了, 我需要程序(控件)一开始呈现足够可观的尺寸, 但不是最小只能是这个尺寸, 我希望后续能够调小
  • 于是我发现了size_allocate_vfunc这个虚函数,
    只要有窗口尺寸发生变化的事件一触发就会调用这个函数
    我们可override一下主窗口的这个虚函数, 在里面做你需要做的事
    那么上面的问题我只需再次set_size_request()便可解决
  • std::call_once函数可帮助我在整个程序生命期里只执行一次,虽然自己写一个bool判断也可以达成目的, 但std::call_once更方便可观, 而且用了mutex, 是线程安全的
    void size_allocate_vfunc(int width, int height, int baseline)override
    {std::cout << width << " " << height << " " << baseline << " " << std::endl;Gtk::Widget::size_allocate_vfunc(width, height, baseline);m_pMainPaned->set_position(width - 100);//设置第二个Paned的滑动柄位置m_pSubPaned->set_position(100);//设置第一个Paned的滑动柄位置 std::call_once(onceFlag, [this]{m_pMBox->set_size_request(100, 100);});
    }
    
  • 上面也设置了split窗口滑动柄位置也随着主窗口尺寸变化

提示音

  • 我发现不能像以前那样printf(“%c”,7);来发出蜂鸣器Beep~的声音
  • 于是我发现了
    //Beep(1000, 150); windows平台 需包含<windows.h>
    //gdk_surface_beep(this->get_surface()->gobj());//通用
    gdk_display_beep(this->get_display()->gobj());//通用
    
    Beep()的声音不太好听

快速提示信息对话框AlertDialog

void ExampleWindow::Hints(std::string Message, const std::function<void()> &callable) {auto tempDialog = Gtk::AlertDialog::create();// Reset values that may have been set by on_button_question_clicked().tempDialog->set_modal(true);tempDialog->set_message("提示.");tempDialog->set_detail(Message);tempDialog->set_buttons({"OK"});tempDialog->set_default_button(0); // OK button or Return keytempDialog->set_cancel_button(0); // Cancel button or Escape keytempDialog->choose(*this, [callable](const Glib::RefPtr<Gio::AsyncResult> &result) {if (callable) {callable();}});gdk_display_beep(this->get_display()->gobj());
}

鼠标移入移出事件

  • https://gnome.pages.gitlab.gnome.org/gtkmm-documentation/sec-eventsignals.html
  • 如果只是简单的点击事件那就不需要关心事件控制器
  • 但比如要鼠标移入时模糊
    void BG_blur() {auto controrller = Gtk::EventControllerMotion::create();controrller->signal_enter().connect([this](const double &a, const double &b) {std::cout << "enter" << std::endl;auto style = m_pBG_image->get_style_context();style->add_class("hovered");}, true);controrller->signal_leave().connect([this]() {std::cout << "leave" << std::endl;auto style = m_pBG_image->get_style_context();style->remove_class("hovered");}, true);m_pmainFrame->add_controller(controrller);
    };
    

布局与父子控件关系

  • 一般兄弟控件之间各占一块空间, 有些时候需要有能重叠的控件

  • 比如我需要给程序做背景图片怎么办?
    给父控件添加css属性 background-image: url(‘xxx.png’);?
    可以是可以, 但我一旦给它的图片加了一些css的动画效果, 会影响到它全部的子控件, 比如 filter: blur(5px);

  • 于是 Gtk::Overlay 被我找出来了
    有两个方法 set_child(A) 和add_overlay(B) 用来做重叠关系
    B总叠在A上面

    前需:
    A和B都不能有 parent 否则set_child 和 add_overlay 都将失败

    Cambalache中也直接提供 Gtk::Overlay 控件
    只需要把 B 放到它的下级目录就不用担心 B 有 parent
    A也同理
    也可以在 Cambalache 中设置她的子控件这样就不用在.cpp文件中再set_child()了:
    image
    只需要把它下级目录下某一个控件的id填入其中即可
    使其成为该overlay控件下 重叠顺序中最底层的控件

图片

  • 使用css背景图片是真方便
    background-image: url('GoolGirl2.png');
    background-position: right center;
    background-size: cover;
    
  • 但有时候要获取图片的原始尺寸做一些定制操作时就不那么方便了

后续

  • 还有一些gtk的控件我没有太深的了解
  • 还有搜索功能没有做
    • ctrl+f 搜索 ldd打印出来的未命中的dll的上下文

源码及资源

  • https://download.csdn.net/download/Computer_Tech/88829922

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

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

相关文章

windows11 MSYS2下载安装教程

MSYS2 可以理解为在windows平台上模拟linux编程环境的开源工具集 当前环境&#xff1a;windows11 1. 下载 官网地址可下载最新版本&#xff0c;需要科学上网 https://www.msys2.org/ 2. 安装 按照正常安装软件流程一路next就可以 打开 3. 配置环境 网上很多教程提到需…

【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门之常用属性

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

双重OSPF + OSPF综合实验

一、实验要求 1.R4为ISP&#xff0c;所连接的所有物理接口为公有网段&#xff0c;任意指定IP即可。 2.R1-2-3 构建一个星型结构的MGRE结构&#xff0c;其中R1为中心点&#xff0c;假设R1的公有IP为固定地址。 3.R1-5-6 构建另一个全连网状的MGRE网络&#xff0c;其中R1/5均为中…

分享3款开源免费好用的Docker可视化管理工具安装部署教程

文章目录 1.前言2.Docker Desktop3.Portainer3.1 Portainer默认英文版本安装3.2 Portainer汉化版本安装3.3官方镜像说明3.3.1ssl访问3.3.2Nginx反代3.3.3Nginx反代设置子目录3.3.4docker-compose部署 3.4登录 4.DockerUI4.1简介4.2项目地址4.3部署启动命令4.4登录4.5首页 5.总结…

配置VMware实现从服务器到虚拟机的一键启动脚本

正文共&#xff1a;1666 字 15 图&#xff0c;预估阅读时间&#xff1a;2 分钟 首先祝大家新年快乐&#xff01;略备薄礼&#xff0c;18000个红包封面来讨个开年好彩头&#xff01; 虽然之前将服务器放到了公网&#xff08;成本增加了100块&#xff0c;内网服务器上公网解决方案…

蓝桥杯嵌入式第9届真题(完成) STM32G431

蓝桥杯嵌入式第9届真题(完成) STM32G431 题目 分析和代码 main.h /* USER CODE BEGIN Header */ /********************************************************************************* file : main.h* brief : Header for main.c file.* …

分析“e^iπ+1=0”的错谬及其违反数学规则

如果评选从远古到现代对人类智商羞辱最严重的事件&#xff0c;欧拉公式“e^iπ-1”若说第二、就没有哪个能称第一。 看下面罗列的关系&#xff0c;数学伦理在大数学家欧拉眼里形同虚设&#xff1a; ①“e^iπ-1”没有代码&#xff0c;不能表示数量变化关系&#xff0c;它来自e^…

2024年Midjourney 付费订阅流程 | Midjourney 各版本介绍,使用虚拟信用卡支付买Midjourney流程指南

1.Midjourney介绍 Midjourney 是一款备受欢迎的人工智能生成图像工具&#xff0c;它可以通过输入文字描述&#xff0c;自动生成精美的图像。与许多其他图像生成工具不同&#xff0c;Midjourney 不需要安装任何软件&#xff0c;也不受个人电脑性能的限制&#xff0c;因为它运行…

《21天精通IPv4 to IPv6》第17天:IPv6的全球部署现状——IPv6全球部署现状怎么样?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

C++进阶(十五)C++的类型转换

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换1、static_cast2、reint…

Excel——重复项处理

一、高亮重复项 选择需要高亮重复项的列/单元格 选择【数据】——【重复项】—— 【高亮重复项】 如果高亮重复项的数据较长&#xff0c;例如&#xff1a;身份证号、银行卡&#xff0c;可以勾选下列选项&#xff0c;能够精准检查重复项。 结果如下所示 如果想要清除高亮的重复…

k8s-项目部署案例

一、容器交付流程 在k8s平台部署项目流程 在K8s部署Java网站项目 DockerFile 如果是http访问&#xff0c;需要在镜像仓库配置可信任IP 三、使用工作负载控制器部署镜像 建议至少配置两个标签 一个是声明项目类型的 一个是项目名称的 继续配置属性 资源配额 健康检查 五、使…