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 key
    tempDialog->set_cancel_button(0); // Cancel button or Escape key
    tempDialog->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

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

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

相关文章

数学建模:K-means聚类手肘法确定k值(含python实现)

原理 当K-means聚类的k值不被指定时&#xff0c;可以通过手肘法来估计聚类数量。   在聚类的过程中&#xff0c;随着聚类数的增大&#xff0c;样本划分会变得更加精细&#xff0c;每个类别的聚合程度更高&#xff0c;那么误差平方和&#xff08;SSE&#xff09;会逐渐变小&am…

【数据存储+多任务爬虫】

数据存储 peewee模块 第三方模块&#xff0c;也需要在cmd中安装。 from peewee import *db MySQLDatabase("spider",host"127.0.0.1",port3306,userroot,password123456 )# 类》表 class Person(Model):name CharField(max_length20) # 类型/约束bi…

基于python深度学习的中文情感分析的系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

利用pandas库进行数据分析

一.这段代码的主要目的是读取IMDB电影数据集&#xff0c;并进行一些基本的数据分析 # codingutf-8 import pandas as pd import numpy as np from matplotlib import pyplot as plt# 定义CSV文件的路径 file_path ./IMDB-Movie-Data.csv# 使用pandas的read_csv函数读取CSV文件…

Codeforces Round 113 (Div. 2)E. Tetrahedron(dp、递推)

文章目录 题面链接题意题解代码总结 题面 链接 E. Tetrahedron 题意 从一个顶点出发走过路径长度为n回到出发点的方案总数 题解 考虑dp f [ i ] [ 0 ∣ 1 ∣ 2 ∣ 3 ] f[i][0|1|2|3] f[i][0∣1∣2∣3]:走了i步&#xff0c;现在在j点的方案总数 转移&#xff1a; f [ i ]…

力扣(LeetCode)数据结构练习题

今天来分享两道力扣&#xff08;LeetCode&#xff09;的题目来巩固上篇时间复杂度和空间复杂度的知识&#xff0c;也就是在题目上加上了空间复杂度和时间复杂度的限制。 目录 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c…

ubuntu下如何查看显卡及显卡驱动

ubuntu下如何查看显卡及显卡驱动 使用nvidia-smi 工具查看 查看显卡型号nvida-smi -L $ nvidia-smi -L GPU 0: NVIDIA GeForce RTX 3050 4GB Laptop GPU (UUID: GPU-4cf7b7cb-f103-bf56-2d59-304f8996e28c)当然直接使用nvida-smi 命令可以查看更多信息 $ nvidia-smi Mon Fe…

关于在分布式环境中RVN和使用场景的介绍3

简介 在《关于在分布式环境中RVN和使用场景的介绍2》和《关于在分布式环境中RVN和使用场景的介绍1》中我们介绍了RVN的概念和在一些具体用例中的使用。在本文中我们讨论一下在分布式环境中使用RVN需要注意的问题。 问题 我们在收到一条待处理的事件时&#xff0c;需要检查该…

2024.2.9

作业1 请使用递归实现n&#xff01; #include<stdio.h> #include<string.h> #include<stdlib.h>int fun(int m) {if(m0)return 1;else{return m*fun(m-1);} } int main(int argc, const char *argv[]) {int m;printf("please enter m:");scanf(&…

MySQL 升级脚本制作

当数据库更新字段后或添加一些基础信息&#xff0c;要对生产环境进行升级&#xff0c;之前都是手动编写sql&#xff0c;容易出错还容易缺失。 通过 Navcat 工具的数据库结构同步功能和数据同步功能完成数据库脚本的制作。 一、结构同步功能 1、选择 工具–结构同步&#xff1…

从零开始实现消息队列(一)

从零开始实现消息队列 .什么是消息队列需求分析核心概念模型 . 什么是消息队列 相信大家都了解过阻塞队列和生产者消费者模型,而阻塞队列最大的用途,就是用于实现生产者消费者模型,生产者消费者模型有以下好处: 解耦合 解释: 当主机A给主机B发消息时,A给B发送请求,B给A返回响应…

CTFshow web(php命令执行59-67)

web59 <?php /* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com */ // 你们在炫技吗&#xff1f; if(isset($_POST…

2024.2.8

1. 现有文件test.c\test1.c\main.c,编写Makkefile Makefile&#xff1a; CCgcc EXEa.out OBJS$(patsubst %.c,%.o,$(wildcard *.c)) CFLAGS-c -oall:$(EXE)$(EXE):$(OBJS)$(CC) $^ -o $%.o:%.c$(CC) $(CFLAGS) $ $^.PHONY:cleanclean:rm $(OBJS) $(EXE) 2. C编程实现&#x…

基于Java (spring-boot)的音乐管理系统

一、项目介绍 播放器的前端&#xff1a; 1.首页&#xff1a;点击歌单中的音乐播放列表中的歌曲进行播放&#xff0c;播放时跳转播放界面&#xff0c;并显示歌手信息&#xff0c;同时会匹配歌词&#xff0c;把相应的歌词显示在歌词面板中。 2.暂停&#xff1a;当歌曲正在播放时…

5G NR 信道号计算

一、5G NR的频段 增加带宽是增加容量和传输速率最直接的方法&#xff0c;目前5G最大带宽将会达到400MHz&#xff0c;考虑到目前频率占用情况&#xff0c;5G将不得不使用高频进行通信。 3GPP协议定义了从Sub6G(FR1)到毫米波(FR2)的5G目标频谱。 其中FR1是5G的核心频段&#xff0…

155基于matlab 的形态学权重自适应图像去噪

基于matlab 的形态学权重自适应图像去噪&#xff1b;通过串并联的滤波降噪对比图&#xff0c;说明并联降噪的优越性。输出降噪前后图像和不同方法的降噪情况的信噪比。程序已调通&#xff0c;可直接运行。 155matlab 自适应图像降噪 串并联降噪 (xiaohongshu.com)

QT:实现图片选择器

一、效果图 二、用到的类 qApp&#xff1a;可以快速获取到项目目录位置。 QSettings &#xff1a;编写config文件&#xff0c;记录上次打开图片的位置&#xff0c;下次打开图片会从上次的位置查找图片。 QPixmap&#xff1a;用于图片的缩放&#xff0c;防止图片过小&#xff0…

Java+SpringBoot+Vue:高校科研管理的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

基于JAVA的贫困地区人口信息管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…

fatal error: rtiostream_utils.h: No such file or directory, rtiostream.h

fatal error: rtiostream_utils.h: No such file or directory 我的设置&#xff1a;