033-第三代软件开发-固定区域截图

2023-10-29 00:28

本文主要是介绍033-第三代软件开发-固定区域截图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

头图

第三代软件开发-固定区域截图

文章目录

  • 第三代软件开发-固定区域截图
    • 项目介绍
    • 固定区域截图
      • QWidget 版本
      • QML 版本
    • 自由截图
    • 自由截图二

关键字: QtQml关键字3关键字4关键字5

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

固定区域截图

其实在Ubuntu 下,也没有找到好的截图工具,之前Windows下都是使用Snipaste,结果发现作者还没有开发Linux的版本,而项目也有截图的需求,不过我们的截图很简单,就是把某一固定的区域保存成图片,在说直白点,就是把某一个控件保存成图片。

QWidget 版本

之前QWidget下就有这个功能,我先找一下QWidget下的实现代码

/*** @brief XXXXXXX::snapshot* 快照功能* 这个暂未开启*/
void XXXXXXX::snapshot(QString path)
{QRect rect = ui->widget_customPlot->geometry();                              // 截图区域QPixmap p = ui->widget_customPlot->grab(rect);                               // 获取谁的RGB
#ifdef QT_NO_DEBUGif(!p.save(path,"png")){qWarning()<<"save snapshot failed" << LOCATION;}
#elseQ_UNUSED(path)QString filePathName = "widget";filePathName += QDateTime::currentDateTime().toString("yyyy-MM-dd hh-mm-ss-zzz");filePathName += ".png";if(!p.save(filePathName,"png")){qDebug()<<"save snapshot failed";}
#endif}

QML 版本

有了在QWidget下的经验,我相信Qt 在Qml 下也为我们做了这接口,所以百度下下。代码如下

function snapshot()
{rect_drawArea.grabToImage(function(result){result.saveToFile("./T_Image/" + UserProfile.userName "/" +turing_QCustomPlotForThyroid_up"_" + turing_QCustomPlotForThyroid_u"_" +Math.floor(new Date()) +".png")   // save to filescreenshotImage.source = result.url;screenshotRect.visible = truescreenshotAnimation.start()hidescreenshotRect.start()});
}

这里就有人会发现还加了别的代码了,是的,我还给他写了一个简单的动画,类似咱们手机截图那样,缩小到右下角,并小时,代码如下:

/// 截图展示框
Rectangle
{id:screenshotRectx:0y:0width: parent.widthheight: parent.heightvisible: falsecolor: "transparent"Image {id: screenshotImageanchors.fill: parentanchors.margins: 2}
}
ParallelAnimation {id: screenshotAnimationrunning: falseNumberAnimation { target: screenshotRect; property: "y";from: 0; to: rect_drawArea.height-10; duration: 300}NumberAnimation { target: screenshotRect; property: "width";from: rect_drawArea.width; to: 10; duration: 300}NumberAnimation { target: screenshotRect; property: "height";from: rect_drawArea.height; to: 10; duration: 300}
}

上面的代码光是缩小了,还得消失呢,我就偷懒了,又给了一个定时器

    Timer{id:hidescreenshotRectrepeat: falseinterval: 300running: falseonTriggered: screenshotRect.visible = false}

自由截图

!!! 以下代码并未在项目中实现

要使用 QT QML 实现自由截图,需要使用 Qt 的 QPixmap 和 QWidget 类,以及 QML 的 Canvas 元素和 Image 元素。下面是一个简单的示例代码,可以在 Qt Quick 应用程序中使用 QML 实现自由截图功能:
首先,在 main.cpp 文件中包含必要的头文件,并创建一个 Stopwatch 类继承自 QObject,用于控制截图的启动和停止:

#include <QApplication>  
#include <QDeclarativeView>  
#include <QDeclarativeContext>
class Stopwatch : public QObject  
{
public:  Stopwatch();  Q_INVOKABLE bool isRunning() const;  
public slots:  void start();  void stop();  
private:  bool m_running;  
};  

然后在 main.h 文件中添加必要的头文件和声明:

#ifndef MAIN_H  
#define MAIN_H
#include <QApplication>  
#include <QDeclarativeView>  
#include <QDeclarativeContext>  
#include <QPixmap>  
#include <QWidget>  
#include <QMouseEvent>  
#include <QKeyEvent>
class Stopwatch;
int main(int argc, char *argv[])  
{//...  QDeclarativeView *view = new QDeclarativeView();  QDeclarativeContext *context = view->getContext();  context->setContextRoot(view);Stopwatch *stopwatch = new Stopwatch();  context->setContextProperty("stopwatch", stopwatch);QWidget *root = new QWidget();  QPixmap *screenshot = new QPixmap(root->size());  screenshot->setParent(root);  context->setContextProperty("screenshot", screenshot);QCanvas *canvas = new QCanvas();  context->setContextProperty("canvas", canvas);//...  return app.exec();  
}
#endif // MAIN_H  

在 main.cpp 文件中,需要实现 Stopwatch 类的 isRunning() 方法和 start() 方法:

Stopwatch::Stopwatch()  
{m_running = false;  
}
bool Stopwatch::isRunning() const  
{return m_running;  
}
void Stopwatch::start()  
{m_running = true;  
}
void Stopwatch::stop()  
{m_running = false;  
}

接下来,在 QML 中可以使用 Canvas 和 Image 元素来实现自由截图功能。以下是一个简单的 QML 代码示例:

import QtQuick 2.0  
import QtQuick.Controls 2.0
Rectangle {  id: root  width: 640  height: 480Canvas {  id: canvas  width: root.width  height: root.heightonPaint: {  var screenshot = stopwatch.screenshot  screenshot.save("screenshot.png")  }  }Image {  id: screenshot  source: "screenshot.png"  anchors.fill: parent  }Keys.onPressed: {  if (event.key === Keys.Space) {  stopwatch.start()  }  }Keys.onReleased: {  if (event.key === Keys.Space) {  stopwatch.stop()  }  }  
}

以上代码使用 Canvas 元素来绘制屏幕截图,并在 Image 元素中显示截图。在 Keys.onPressed 和 Keys.onReleased 事件处理程序中,可以使用 QKeyEvent 来捕获键盘事件,从而控制截图的启动和停止。
要使用此代码,需要在 Qt Quick 应用程序中包含 main.qml 文件,并在该文件中添加上述代码。然后,运行应用程序并在屏幕上自由截图。

自由截图二

!!!仅供参考

import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Window 2.0Window {visible: truewidth: 800height: 600title: "自由截图"Rectangle {id: selectionRectcolor: "transparent"border.color: "red"border.width: 2visible: falseproperty int startX: 0property int startY: 0MouseArea {id: mouseAreaanchors.fill: parenthoverEnabled: trueonPressed: {selectionRect.visible = trueselectionRect.startX = mouseXselectionRect.startY = mouseY}onPositionChanged: {if (mouseArea.pressed) {var width = mouseX - selectionRect.startXvar height = mouseY - selectionRect.startYselectionRect.x = selectionRect.startXselectionRect.y = selectionRect.startYselectionRect.width = widthselectionRect.height = height}}onReleased: {captureScreen(selectionRect.x, selectionRect.y, selectionRect.width, selectionRect.height)selectionRect.visible = false}}}function captureScreen(x, y, width, height) {var screen = Qt.application.screens[0]var grab = screen.grabWindow(0, x, y, width, height)var fileDialog = Qt.createQmlObject("import QtQuick.Dialogs 1.2; FileDialog {}", window)fileDialog.title = "保存截图"fileDialog.selectExisting = falsefileDialog.onAccepted: {grab.saveUrl(fileDialog.fileUrl)}fileDialog.open()}
}

博客签名2021

这篇关于033-第三代软件开发-固定区域截图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296994

相关文章

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

【软件工程】软件开发模型

三、瀑布模型  四、几种软件开发模型的主要特点 题目 判断题 选择题 小结

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.

JVM - Java内存区域

文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖

Ai+若依(智能售货机运营管理系统---帝可得)-人员管理-点位管理-区域管理-合作商管理----【08篇---0001:上】

项目介绍 售货机简介 帝可得是一个基于物联网概念下的智能售货机运营管理系统 物联网 物联网(IoT:Internet of Things)简单来说,就是让各种物品通过互联网连接起来,实现信息的交换和通信。 这个概念听起来可能有点抽象,但我们可以把它想象成一个超级大的社交网络。不过,这个网络里的成员不是人类,而是各种物品。比如,你的冰箱、洗衣机、甚至是你的汽车,它们都可以通过互联网互

【最新华为OD机试E卷-支持在线评测】机器人活动区域(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测,专栏文章质量平均 94 分 最新华为OD机试目录: https://blog.

ACdream区域赛指导赛之手速赛系列(4)

点击打开题目链接 #include <iostream>#include <map>#include <cstdio>#include <string>using namespace std;int a[501];//题意是能不能把一组两个人分到两个不同的正营里面,关键利用map映射void init(){for(int i = 0; i <= 200; i++){a[i]

java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频)

这是什么系统? 获取资料方式在最下方 java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频) 企业员工信息管理系统旨在为公司提供高效的员工信息管理解决方案。该系统的核心功能涵盖密码修改、员工管理、部门管理、出勤管理、工资管理、请假审核等方面,帮助企业优化人力资源管理流程。系统结构如下: (1)前端(员工端): 1.密码修改:员工可以修改自己的密码,提升账户的安全