《QT实用小工具·四十六》多边形窗口

2024-04-29 23:28

本文主要是介绍《QT实用小工具·四十六》多边形窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、概述
源码放在文章末尾

该项目实现了可以移动的多边形窗口,项目demo演示如下所示:
在这里插入图片描述
项目部分代码如下所示:

#include "polygonwindow.h"#include <QBitmap>
#include <QQuickItem>
#include <QQmlFile>
#include <QSGSimpleTextureNode>class PolygonItem : public QQuickItem
{
public:PolygonItem(QQuickItem *parent = nullptr) : QQuickItem (parent) {setFlag(ItemHasContents);}void setTexture(QSGTexture *texture);protected:virtual QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *);private:QScopedPointer<QSGTexture> m_texture;
};void PolygonItem::setTexture(QSGTexture *texture)
{m_texture.reset(texture);
}QSGNode* PolygonItem::updatePaintNode(QSGNode *node, UpdatePaintNodeData *)
{QSGSimpleTextureNode *n = static_cast<QSGSimpleTextureNode *>(node);if (n) {if (!m_texture.isNull()) {n->setTexture(m_texture.data());n->setFiltering(QSGTexture::Linear);n->setRect(boundingRect());}} else {n = new QSGSimpleTextureNode();if (!m_texture.isNull()) {n->setTexture(m_texture.data());n->setFiltering(QSGTexture::Linear);n->setRect(boundingRect());}}return n;
}class PolygonWindowPrivate
{
public:QPoint m_startPos;QPoint m_oldPos;QUrl m_source;QPixmap m_background;QScopedPointer<PolygonItem> m_centerItem;
};PolygonWindow::PolygonWindow(QWindow *parent): QQuickWindow (parent)
{d = new PolygonWindowPrivate;setOpacity(0.8);setColor(Qt::transparent);setFlags(flags() | Qt::Window | Qt::FramelessWindowHint);connect(this, &QQuickWindow::widthChanged, this, [this](int) {changeTexture();});connect(this, &QQuickWindow::heightChanged, this, [this](int) {changeTexture();});connect(this, &QQuickWindow::sceneGraphInitialized, this, [this]() {d->m_centerItem.reset(new PolygonItem(contentItem()));changeTexture();});
}PolygonWindow::~PolygonWindow()
{delete d;
}QUrl PolygonWindow::source() const
{return d->m_source;
}void PolygonWindow::setSource(const QUrl &source)
{if (source != d->m_source) {d->m_source = source;d->m_background = QQmlFile::urlToLocalFileOrQrc(source);changeTexture();emit sourceChanged();}
}void PolygonWindow::mousePressEvent(QMouseEvent *event)
{d->m_startPos = event->globalPos();d->m_oldPos = position();event->ignore();QQuickWindow::mousePressEvent(event);
}void PolygonWindow::mouseReleaseEvent(QMouseEvent *event)
{d->m_oldPos = position();QQuickWindow::mouseReleaseEvent(event);
}void PolygonWindow::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() & Qt::LeftButton) {setPosition(d->m_oldPos - d->m_startPos + event->globalPos());}QQuickWindow::mouseMoveEvent(event);
}void PolygonWindow::changeTexture()
{auto texture = d->m_background.scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);if (!texture.isNull()) {d->m_background = texture;setMask(QRegion(d->m_background.mask()));if (d->m_centerItem) {d->m_centerItem->setSize(size());d->m_centerItem->setTexture(createTextureFromImage(d->m_background.toImage(), TextureHasAlphaChannel));}}update();
}

源码下载

这篇关于《QT实用小工具·四十六》多边形窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

超强的截图工具:PixPin

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

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

husky 工具配置代码检查工作流:提交代码至仓库前做代码检查

提示:这篇博客以我前两篇博客作为先修知识,请大家先去看看我前两篇博客 博客指路:前端 ESlint 代码规范及修复代码规范错误-CSDN博客前端 Vue3 项目开发—— ESLint & prettier 配置代码风格-CSDN博客 husky 工具配置代码检查工作流的作用 在工作中,我们经常需要将写好的代码提交至代码仓库 但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的 所