基于 QT 开发 FLIPPED :简易且漂亮的跨平台截图贴图软件

news2024/11/20 0:42:58

文章目录

    • FLIPPED
    • 运行预览
      • 视频演示
      • 截图演示
    • 特性
    • 快捷键
    • 架构思路
    • 思路
    • 细节打磨
      • 实际问题
      • 解决方案
    • 编译
      • 依赖
      • Windows
      • MacOS / Linux
    • 运行效果
    • 作者
    • 贡献者
    • 反馈
    • 下载安装包
    • 系列地址

简 述: 新开发的一款跨平台的截图贴图的软件作品, FLIPPED:Simple and beautiful cross-platform screenshot software。


本文初发于 “偕臧的小站”,同步转载于此。


FLIPPED

FLIPPED
FLIPPED


Simple and beautiful cross-platform screenshot software.


运行预览

视频演示

  • [P1] FLIPPED-MACOS 运行演示
  • [P2] FLIPPED-WINDOWS 运行演示
  • [P3] FLIPPED-LINUX 运行演示

截图演示

MACOS


WINDOWS


LINUX


特性

  • 贴图(钉图)
  • 多屏截图,延时截图,自定义截图
  • 智能识别窗口矩形(Windows & Linux)
  • 矩形、椭圆、箭头、画笔、马赛克、文本、序号
  • 撤销、重做(多级)、保存、取消、拷贝到剪切板
  • 截图框样式三套,且主题色提供自定义;屏幕十字线样式自定义
  • 国际化:英文、简体中文、繁体中文;字体和字号自定义

快捷键

按键描述模式
, , , ( A, S, W, D )移动选中框位置 1 像素局部
Ctrl + , , , 扩展选中框尺寸 1 像素局部
Alt + , , , 收缩选中框尺寸 1 像素局部
Shift + , , , 移动选中框位置 10 像素局部
Shift + Ctrl + , , , 扩展选中框尺寸 10 像素局部
Shift + Alt + , , , 收缩选中框尺寸 01 像素局部
Shift + F4快速保存截图局部
Esc退出局部
F6窗口智能截图全局
F7延时截图全局
F8全屏截图全局

架构思路

技术架构属初看觉着很简单,耗时几天就能写一个 Demo 级的截图,如很早写的 ShotX。

但后来心心念念,准备正式写一个具有高级/商业的软件时候,就属于有点规模。其属细节点超级多;


思路

  1. 创建一个 QWidget 窗口,去掉标题栏后,全屏且置顶
  2. 捕获此刻多屏幕状态保存为 QPixamp,然后绘画在 QWidget 最底层
  3. 再绘画一层透明黑色作为遮罩
  4. 将 QWidget 放于虚拟桌面的左上角;后面注意相对坐标和绝对坐标的转换
  5. 判断当前所处模式:Wait / Select / Move / Draw / Stretch,标记
  6. 根据模式标记,对鼠标的 Press / Move / Release 事件进行对应的操作;重点是鼠标放下和松开时的 QPoint
    • 捕获模式:智能窗口 / 全屏截图 / 延时截图 / 自定义截图 等
    • 绘画模式则细分:一级绘画栏和二级绘画栏(愈加精确的参数)
    • 拉伸可为:拉伸已绘图形 / 选中框 / … ,操作是可见区域的任意一个图案
    • 移动同上类似
  7. 重复迭代步骤 6,进行标注等功能
  8. 导出图片保存到本机路径 / 剪切板。
  9. 亦可直接贴图(钉住)在屏幕上,然后进行缩放和透明度等操作,作为写作时的参照。

细节打磨

写的时候,保证开发过程的多平台编译,push 代码时触发构建 CI/CD, 及生成对应平台的包便于安装。

截图的工作量、尤其是细节的实现是挺多的。需要花时间来打磨产品和优化细节,让它成为美观又好用的一款软件,再造一个极佳的轮子。

绝知此事要躬行;列举开发过程中遇到的具体困境,以供后来者参考。


实际问题

  1. FLIPPED 开发在不同系统上、使用不同的 Kit Tools 上面均不会乱码?
  2. 项目使用第三方开源库时,选择 git submodulegit treemodule 命令呢?
  3. 选用何种 LOG 会性能和成本最佳?便于后面定位和分析
  4. CMake 管理跨平台项目,生各平台的 IDE 的解决方案
  5. Window 上自带一些基础宏的数据类型含义?
  6. 项目运行直接显示后,按键盘无响应的定位和解决。
  7. Qt 控件显示的方块 ■◆ 乱码?
  8. Linux 如何构建打包为 .deb 文件?
  9. Window 如何构建一件安装的 .exe? 书写构建的脚本?
  10. ----------------------------------- 更多进阶细节问题----------------------------------
  11. 如何实现一个完美的无边框窗口(跨平台)?
  12. 如何实现一个完美的透明磨砂效果(跨平台)?
  13. Windows 和 Linux 支持一次截多个屏幕,MacOS 没有对应接口,如何实现呢?
  14. 如何书写 .yml 的脚本,构建私人的 CI/CD 呢?
  15. Window / Linux / MacOS 下如何获取所有窗口的位置和尺寸,以及其它更多信息呢?
  16. 如何实现国际化 I18N?尤其是未使用 Qt Designer 创建 .ui 文件,遇到无 ui->retranslateUi(this) 函数?
  17. 如何解决快捷键 和 Action 调用不同截图?
  18. 如何确保 MacOS 上的效果和 Window上面保持外观的一致?
  19. 如何解决使用 ESC 取消截图后的内存泄露问题?QPointer 、智能指针、还是单例?
  20. 对于使用单例模式不止一处时,可采用奇异玄幻模板?
  21. 代码如何更好的解耦和是适当位置,采用适当的设计模式?
  22. 如何绘制自己的独有的控件?
  23. 如何迭代中进行重构和封装?每次都因为什么?

解决方案

  • 『解决』 愿编程不再乱码(含Qt)-根因深究

  • 『解决』 Git Submodule 基本用法

  • 『解决』从 LOG 分析调研,采用 Spdlog / QDebug,以及对此两套的宏封装

    • Log:日志选型调研『一』
    • Log:日志之 Spdlog 极简用法示范『二』
    • Log:日志之 Spdlog 核心构成『三』
  • 『解决』有很多,后抽空整理更多

    1. CMake 设置 Target 输出目录和后缀名
    2. CMake 之 BUILD_SHARED_LIBS 和 CMAKE_BUILD_TYPE 用法教程
  • 『解决』 LPSTR/LPCSTR/LPTSTR/HWND/HANDLE/HMODULE/HINSTANCE 等含义和区别

  • 『解决』 参考

    • Qt 新弹窗不响应键盘按键,难道也是无焦点?
    • Windows 编程之 WINUSERAPI 和 WINAPI 区别
  • 『解决』还是 Qt Assistant 解围粗心, 创建 QKeySequenceEdit() 后,显示方块■◆乱码

  • 『解决』 Linux 中用 dh_make 将 Qt + CMake 项目打包为 deb 文件

  • 『解决』构建的自动打包

  • 『解决』未完待续…


编译

依赖

  • Qt >= 5.15.2

  • CMake >= 3.16

  • MSVC >= 2019 | MinGW >= 8.1.0 | GCC >= 9.4 | Clang >= 12.0

    备注: 这是已经成功编译的一些版本,在更低的版本未经过测试。


Windows

  • 工具链: Windows 10 & Qt 5.15.2 & CMake 3.24.1 & MSVC 2019 ( or MinGW 8.1.0)

  • 编译步骤:

    # ******************** MSVC 2019 ********************
    #『Step1』
    # x86:
    # 添加 "C:\Qt\5.15.2\msvc2019\bin" 到 path 后,终端执行 echo %PATH% 使其立即生效
    "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" x86
    cmake -G "Visual Studio 16 2019" -A Win32 ..
    devenv Flipped.sln /Build "Release|Win32"
    
    # x64:
    # 添加 "C:\Qt\5.15.2\msvc2019_64\bin" 到 path 后,终端执行 echo %PATH% 使其立即生效
    "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64
    cmake -G "Visual Studio 16 2019" -A x64 ..
    devenv Flipped.sln /Build "Release|x64"
    
    #『Step2』
    Visual Studio 2019 open `Flipped.sln`
    
    #『Step3』
    windeployqt  bin/Flipped.exe --no-translations
    
    # ******************** MinGW 8.1.0 ********************
    QtCreator opens the `CMakeLists.txt` file in the root directory of the source code
    

MacOS / Linux

  • 工具链:

    • MacOS: MacOS 10.15 & Qt 5.15.2 & CMake 3.24 & Clang 12.0
    • Linux: Ubuntu 20.04 & Qt 5.15.2 & CMake 3.24 & GCC 9.4
  • 编译步骤:

    git clone --recursive https://github.com/XMuli/xxxxx.git
    cd Flipped
    mkdir build & cd build
    cmake ..
    make -j16
    

运行效果

构建各个平台后的包,附上另外一些实际运行图。Other 更多截图效果可 → 在此预览











作者

GitHub 偕臧 → XMuli

贡献者

若是帮助到了你,或者觉得有用,可以点击该项目的的 ⭐Star 🍴 Fork 的两个图标,方便抬手之间,表示点个赞,手有余香,其次才是一份冰的肥宅快乐水。 → project-flipped


当然也可以赠与一杯冰阔落[捐赠/打赏 ← 点击展开二维码]

- 若是此项目帮助到了你,或者觉得有用,或是想帮助此项目的发展,你也能够邀请我喝一杯杯肥仔快乐水。 -

 

反馈

非常欢迎你的加入!对于此软件有任何缺陷、建议、功能想法、都可 提一个 Issue ;


下载安装包

离线安装包下载 Releases

反馈 BUG/SUGGEST,用户社区等,和最新版本安装包获取,在QQ群:418103279


系列地址

QtExamples 欢迎 star ⭐ 和 fork 🍴这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录

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

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

相关文章

基于Web的智慧LNG加气站2D组态控制系统

LNG(Liquefied Natural Gas),即液化天然气的英文缩写。LNG是通过在常压下气态的天然气,经过预处理,脱除重烃、硫化物、二氧化碳和水等杂质后,冷却至-162℃,使之凝结成液体。LNG无色无毒无味,是天然气经净化…

算法分析与设计—分治法

分治者,分而治之也。概述分治法也称为分解法、分治策略等。分治法算法思想如下:(1) 将一个问题划分为同一类型的若干子问题,子问题最好规模相同。(2) 对这些子问题求解(一般使用递归方法,但在问题规模足够小时&#xf…

fileinclude(通过cookie赋值的文件包含)

打开链接,提示flag在flag.php里 内容里还有一个路径/var/www/html/index.php,猜测flag.php应该也是在这个路径下 Ctrlu查看网页源码 代码中发现 include($lan.".php"); 可知这里存在文件包 且包含与lan的值有关 由代码 $lan $_COOKIE[lang…

安装kafka及一些命令

1,先把压缩包放到/opt/install目录下 2,解压,更名 解压:[rootsiwen install]# tar -zxf kafka_2.12-2.8.0.tgz -C ../soft 更名:[rootsiwen soft]# mv kafka_2.12-2.8.0/ kafka212 3,配置文件 cd opt/so…

讯飞 语音唤醒 Android SDK

语音唤醒 Android SDK 文档 | 讯飞开放平台文档中心https://www.xfyun.cn/doc/asr/awaken/Android-SDK.html前往控制台,设置唤醒关键词: 控制台-讯飞开放平台https://console.xfyun.cn/services/awaken注意,可以对唤醒词进行评估&#xff0c…

游戏开发需要学什么

游戏开发可以说是当下最热门的专业了,不过这一行业虽然很火热,但也有一定的竞争压力。这个行业需要大量的人才,而且游戏开发这个行业目前还处于初级阶段,所以发展空间还是很大的。现在有很多人都想进入这个行业,但却不…

ESP32-IDF开发笔记 | 03 - 使用SPI外设驱动ST7789 SPILCD

一、硬件说明 ST7789屏幕引脚ESP32C3F引脚3V33V3GNDGNDMOSIIO_07CLKIO_06DCIO_08RSTIO_04BLIO_05 二、ESP32的SPI外设 1. 外设功能 ESP32-C3具有三个SPI接口(SPI0、SPI1和SPI2)。 SPI0和SPI1只能配置为在SPI内存模式下操作,而SPI2可以配置为在SPI内存和通用SPI模…

2023年MathorCup数学建模C题电商物流网络包裹应急调运与结构优化问题解题全过程

2023年第十三届MathorCup高校数学建模挑战赛 C题 电商物流网络包裹应急调运与结构优化问题 原题再现: 电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场地之间的运输线路组成,如图 1 所示。受节假日和“双十一”、“…

手机应用开发之如何利用蓝牙与HC-05通信?

文章目录0、引言1、创建工程2、准备真机调试3、应用布局4、代码编写5、功能演示0、引言 本文通过AndroidStudio开发手机应用软件,实现蓝牙连接功能,并且能发送消息给HC-05蓝牙,也能接收HC-05回传的消息。本文在【AndroidStudio如何进行手机应…

C++基础学习笔记(八)——提高编程PART3

参考链接:https://www.bilibili.com/video/BV1et411b73Z/p237&spm_id_frompageDriver&vd_sourceb4d9cee68649c8adcb1e266f7147cd5c 4 STL- 函数对象 4.1 函数对象 4.1.1 函数对象概念 概念: 重载函数调用操作符的类,其对象常称为…

STL的并行遍历:for_each(依赖TBB)和omp parallel

文章目录OMP parallelOpenMP安装OpenMP示例1) OMP Hello World2) OMP for 并行3. OMP 官方示例4) map使用OMP遍历TBB的安装和使用Gcc9的安装TBB 安装TBB使用在图像处理等应用中,我们经常需要对矩阵,大数量STL对象进行遍历操作,因此并行化对算…

R语言与作物模型(以DSSAT模型为例)融合应用

随着基于过程的作物生长模型(Process-based Crop Growth Simulation Model)的发展,R语言在作物生长模型和数据分析、挖掘和可视化中发挥着越来越重要的作用。想要成为一名优秀的作物模型使用者与科研团队不可或缺的人才,除了掌握对…

MySQL存储过程 if、case、while、loop、游标、变量、条件处理程序

存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就是数据库 SQL 语言层面的代…

barret reduction原理详解及硬件优化

背景介绍 约减算法,通常应用在硬件领域,因为模运算mod是一个除法运算,在硬件中实现速度会比乘法慢的多,并且还会占用大量资源,因此需要想办法用乘法及其它简单运算来替代模运算。模约减算法可以利用乘法、加法和移位等…

怎么评价2023年第十三届MathorCup高校数学建模挑战赛?

文章目录赛题思路选题建议1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题赛题思路 (赛题出来以后第一时间在CSDN分享) 选题建议 首先要注意,A、B题为研究生组可选题目,A…

还在用 if else 做参数校验?快来学习高级参数校验吧

文章目录一、前言二、自定义校验2.1 定义 GenderArrayValuable 接口2.2 定义性别 GenderEnum 枚举类2.3 自定义 GenderCheck 自定义约束注解2.4 自定义约束的校验器 GenderValidator2.5 定义 UserUpdateGenderDTO2.6 定义一个对外访问接口2.7 请求接口 进行验证三、总结一、前言…

从C出发 17 --- 函数调用

从表面上来看,函数就是一个代码片段,只不过说这个代码片段可以反复利用,通过调用的方式反复利用,通过函数调用,我们可以将参数传到函数所对应的代码片段里面,然后代码片段去处理这些参数,得到一…

Linux下Samba服务器的安装与配置(简单实用)

为了可以实现Linux与windows之间实现文件的共享,方便文件可以直接修改,而不是像以前需要拷贝文件再进行修改,samba的诞生是为了实现现在的这些需求。我们知道Linux之间可以使用NFS服务器来实现文件的共享,samba的诞生就是为了使wi…

Spring Cloud Security

Spring Cloud Security Spring Cloud Security用于构建微服务的安全应用程序和服务,它可以轻松实现微服务系统架构下的统一安全认证与授权。 Spring Cloud Security 有以下组件。 spring-cloud-security:为Zuul、Feign、Oauth 2.0 的Resource Serve…

ChatGPT5是否会影响人类的发展和工作?

目录前言ChatGPT5是什么ChatGPT5 的潜在影响挑战与风险总结前言 ChatGPT的普及也带来了大量的讨论,关于它是否会影响人类的发展和工作。本文将讨论 ChatGPT5 如何可能改变人类的工作和发展,以及潜在的利弊和挑战。在话题开始之前,让我们先从…