Qt项目【上位机十字屏开发】

效果图

在这里插入图片描述

说明

重写 QWidget 中的 paintEvent() 处理绘图事件,废话不多说,上代码

源码

#ifndef MYWIDGETFORM_H
#define MYWIDGETFORM_H#include <QWidget>namespace Ui {
class myWidgetForm;
}enum MYTYPE{SIZEWIDTH,SIZEHEIGHT,TOPWIDTH,TOPHEIGHT,MIDDLEWIDTH,MIDDLEHEIGHT,BOTTOMWIDTH,BOTTOMHEIGHT,NONE = 10,
};class myWidgetForm : public QWidget
{Q_OBJECTpublic:explicit myWidgetForm(QWidget *parent = nullptr);~myWidgetForm();void paintEvent(QPaintEvent *event);void setTopWidth(int topWidth);void setTopHeight(int topHeight);void setCenterWidth(int centerWidth);void setCenterHeight(int centerHeight);void setBottomWidth(int bottomWidth);void setBottomHeight(int bottomHeight);void setZoom(int times, QSize topSize, QSize centerSize, QSize bottomSize);public slots:void CrossType(MYTYPE type);private:Ui::myWidgetForm *ui;MYTYPE myType_;int topWidth_;int topHeight_;int centerWidth_;int centerHeight_;int bottomWidth_;int bottomHeight_;
};#endif // MYWIDGETFORM_H
#include "mywidgetform.h"
#include "ui_mywidgetform.h"
#include <QPainter>
#include <QDebug>myWidgetForm::myWidgetForm(QWidget *parent): QWidget(parent), ui(new Ui::myWidgetForm)
{ui->setupUi(this);
}myWidgetForm::~myWidgetForm()
{delete ui;
}void myWidgetForm::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setBrush(QColor("#000000"));//原点int posX = (width() - centerWidth_) / 2;int posY = (height() - (topHeight_ + centerHeight_ + bottomHeight_)) / 2;int sizeW = centerWidth_;int sizeH = topHeight_ + centerHeight_ + bottomHeight_;//painter.drawRect(posX, posY, sizeW, sizeH);int leftUpX = (sizeW - topWidth_) / 2;//十字painter.drawRect(posX + leftUpX, posY, topWidth_, topHeight_ + centerHeight_ + bottomHeight_);painter.drawRect(posX, posY + topHeight_, sizeW, centerHeight_ );//四个遮挡部分painter.setBrush(Qt::Dense6Pattern);QRect rect1(posX, posY, leftUpX, topHeight_);QRect rect2(posX + leftUpX + topWidth_, posY, leftUpX, topHeight_);QRect rect3(posX, posY + topHeight_ + centerHeight_, leftUpX, bottomHeight_);QRect rect4(posX + leftUpX + topWidth_, posY + topHeight_ + centerHeight_, leftUpX, bottomHeight_);painter.drawRect(rect1);painter.drawRect(rect2);painter.drawRect(rect3);painter.drawRect(rect4);QPen pen;pen.setWidth(5);pen.setColor(QColor("#ffffff"));painter.setPen(pen);//左上painter.drawLine(posX + leftUpX, posY + 0, posX + leftUpX, posY + topHeight_);painter.drawLine(posX + 0, posY + topHeight_, posX + leftUpX, posY + topHeight_);//右上painter.drawLine(posX + centerWidth_, posY + topHeight_, posX + topWidth_ + leftUpX, posY + topHeight_);painter.drawLine(posX + topWidth_ + leftUpX, posY + 0, posX + topWidth_ + leftUpX, posY + topHeight_);//左下painter.drawLine(posX + 0, posY + centerHeight_ + topHeight_, posX + leftUpX, posY + centerHeight_ + topHeight_);painter.drawLine(posX + leftUpX, posY + sizeH, posX + leftUpX, posY + centerHeight_ + topHeight_);//右下painter.drawLine(posX + centerWidth_, posY + topHeight_ + centerHeight_, posX + topWidth_ + leftUpX, posY + topHeight_ + centerHeight_);painter.drawLine(posX + topWidth_ + leftUpX, posY + sizeH, posX + topWidth_ + leftUpX, posY + topHeight_ + centerHeight_);//宽高painter.drawLine(posX + 0, posY + 0, posX + sizeW, posY + 0);painter.drawLine(posX + 0, posY + 0, posX + 0, posY + sizeH);pen.setWidth(10);pen.setColor(QColor("#ffff00"));painter.setPen(pen);switch(myType_) {case SIZEWIDTH:painter.drawLine(posX + 0, posY + 0, posX + sizeW, posY + 0);break;case SIZEHEIGHT:painter.drawLine(posX + 0, posY + 0, posX + 0, posY + sizeH);break;case TOPWIDTH:painter.drawLine(posX + leftUpX, posY + 0, posX + leftUpX + topWidth_, posY + 0);break;case TOPHEIGHT:painter.drawLine(posX + leftUpX, posY + 0, posX + leftUpX, posY + topHeight_);break;case MIDDLEWIDTH:painter.drawLine(posX + 0, posY + topHeight_, posX + sizeW, posY + topHeight_);break;case MIDDLEHEIGHT:painter.drawLine(posX + 0, posY + topHeight_, posX + 0, posY + topHeight_ + centerHeight_);break;case BOTTOMWIDTH:painter.drawLine(posX + leftUpX, posY + topHeight_ + centerHeight_, posX + leftUpX + topWidth_, posY + topHeight_ + centerHeight_);break;case BOTTOMHEIGHT:painter.drawLine(posX + leftUpX, posY + topHeight_ + centerHeight_, posX + leftUpX, posY + sizeH);break;default:break;}painter.end();update();
}void myWidgetForm::setTopWidth(int topWidth)
{topWidth_ = topWidth;
}void myWidgetForm::setTopHeight(int topHeight)
{topHeight_ = topHeight;
}void myWidgetForm::setCenterWidth(int centerWidth)
{centerWidth_ = centerWidth;
}void myWidgetForm::setCenterHeight(int centerHeight)
{centerHeight_ = centerHeight;
}void myWidgetForm::setBottomWidth(int bottomWidth)
{bottomWidth_ = bottomWidth;
}void myWidgetForm::setBottomHeight(int bottomHeight)
{bottomHeight_ = bottomHeight;
}void myWidgetForm::setZoom(int times, QSize topSize, QSize centerSize, QSize bottomSize)
{topWidth_ = topSize.width() * times;topHeight_ = topSize.height() * times;centerWidth_ = centerSize.width() * times;centerHeight_ = centerSize.height() * times;bottomWidth_ = bottomSize.width() * times;bottomHeight_ = bottomSize.height() * times;
}void myWidgetForm::CrossType(MYTYPE type)
{myType_ = type;
}

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

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

相关文章

Spring 循环依赖解决方案

文章目录 1. 循环依赖的产生2. 循环依赖的解决模型3. 基于setter/Autowired 的循环依赖1_编写测试代码2_初始化 Cat3_初始化 Person4_ 回到 Cat 的创建流程5_小结 4. 基于构造方法的循环依赖5. 基于原型 Bean 的循环依赖6. 引人AOP的额外设计7. 总结 IOC 容器初始化bean对象的逻…

Java并发类的主要API方法-CountDownLatch和CyclicBarrier

1.概念介绍 CountDownLatch 是一个计数器&#xff0c;计数器的初始值由创建它时指定。每次调用 countDown() 方法时&#xff0c;计数器会减1&#xff0c;直到计数器值变为0时&#xff0c;所有调用 await() 的线程都会被唤醒继续执行。 CyclicBarrier 是 Java 中另一个常用的同…

渗透率超50%,新能源汽车已成中国制造新名片

近日&#xff0c;乘联会公布了最新一期全国乘用车市场分析报告。报告显示&#xff0c;今年7月&#xff0c;中国乘用车市场零售销量173.2万辆&#xff0c;批发销量195.6万辆&#xff1b;同期&#xff0c;新能源乘用车零售销量87.8万辆&#xff0c;批发销量94.5万辆。按此计算&am…

DC-4靶机渗透测试

一、靶机下载地址 https://www.vulnhub.com/entry/dc-4,313/ 二、信息收集 1、主机发现 # 使用命令 nmap 192.168.145.0/24 -sn | grep -B 2 "00:0C:29:43:49:A5" 2、端口扫描 # 使用命令 nmap 192.168.145.217 -p- -sV 3、指纹识别 # 使用命令 whatweb "…

顺序表各种接口的实现(C)

线性表 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。在物理结构上并不一定是连续的&#xff0c;线性表在物…

旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f579;️KMP算法练习题 LeetCode链接&#xff1a;796. 旋转字符串 文章目录 1.题目描述&#x1f351;2.题解&#x1fad0;2.1 暴力解法&#x1fad2;2.2 模拟…

c# 排序、强转枚举

List<Tuple<double,int>> mm中doble从小到大排序 mm本身排序 在C#中&#xff0c;如果你有一个List<Tuple<double, int>>类型的集合mm&#xff0c;并且你想要根据Tuple中的double值&#xff08;即第一个元素&#xff09;从小到大进行排序&#xff0c;同…

[Qt][对话框][下]详细讲解

目录 1.Qt内置对话框0.有哪些1.消息对话框 QMessageBox2.颜色对话框 QColorDialog3.⽂件对话框 QFileDialog4.字体对话框 QFontDialog5.输⼊对话框 QInputDialog6.进度条对话框 QProgressDialog 1.Qt内置对话框 0.有哪些 Qt提供了多种可复⽤的对话框类型&#xff0c;即Qt标准…

【启明智显技术分享】工业级HMI芯片Model3C/Model3A开发过程中问题记录笔记二

一、Model3C/Model3A芯片介绍 Model3C/Model3A是启明智显针对工业、行业以及车载产品市场推出的一款高性能、低成本的工业级HMI&#xff08;Human-Machine Interface&#xff0c;人机界面&#xff09;芯片。两颗芯片硬件PIN TO PIN&#xff1b;区别在于内置的PSRAM大小不同。该…

百度地图动态绘制台风轨迹

效果图如下: 台风测试数据获取 关键代码: /*** 动态绘制点和线*/drawMakerByAnimate () {const pointsMap = typhoneData.points;const title = typhoneData.tfid + typhoneData.name;if (!pointsMap || pointsMap.length === 0) {return;}if (this.markers.length > 0 &…

Godot《躲避小兵》实战之设置项目

通过之前的学习我们已经基本了解了godot的界面&#xff0c;知道如何创建项目以及节点。那么&#xff0c;从这一章节我们将进入godot官方给我们提供的一个2D游戏开发的小教程进行入手&#xff0c;这个游戏并不是我自己的作品&#xff0c;而是我通过学习完之后&#xff0c;对其进…

C#如何将自己封装的nuget包引入到项目中

问题 自己封装好了一个nuget包&#xff0c;但是不想上传到外网&#xff0c;想局域网使用&#xff0c;有两种方案 搭建私有nuget仓库放到离线文件夹中直接使用 第一种方式请请参考proget安装 下面主要是第二种方式 准备 新建类库项目 using System;namespace ClassLibrary…

数据结构--图(Graph)

定义 图&#xff08;Graph&#xff09;是由顶点的有穷非空集合和顶点之间边的集合组成的一种非线性表结构&#xff0c;通常表示为&#xff1a;G(V,E)&#xff0c;其中&#xff0c;G表示一个图&#xff0c;V是图G中顶点的集合&#xff0c;E是图G中边的集合。 顶点&#xff08;…

阿里云智能大数据演进

本文根据7月24日飞天发布时刻产品发布会、7月5日DataFunCon2024北京站&#xff1a;大数据大模型.双核时代实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;徐晟 阿里云研究员/计算平台产品负责人 主要内容&#xff1a; Overview - 阿里云大数据 AI 产品…

经典算法题总结:数组常用技巧(双指针,二分查找和位运算)篇

双指针 在处理数组和链表相关问题时&#xff0c;双指针技巧是经常用到的&#xff0c;双指针技巧主要分为两类&#xff1a;左右指针和快慢指针。所谓左右指针&#xff0c;就是两个指针相向而行或者相背而行&#xff1b;而所谓快慢指针&#xff0c;就是两个指针同向而行&#xf…

【YOLO5 项目实战】(3)PCB 缺陷检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】(1)YOLO5 环境配置与测试 【YOLO5 项目实战】(2)使用自己的数据集训练目标检测模型 【YOLO5 项目实战】(3)PCB 缺陷检测 【YOLO5 项目实战】(3)PCB 缺陷检测 1. PCB 缺陷检…

vue-cli 中 配置 productionSourceMap 为 false 失效?

背景 最近 发现 vuecli 构建的 项目中配置的 productionSourceMap 为 false 后 &#xff0c;生产代码 还是能够看到 sourceMap 文件 。 原因 生效前提条件 得设置 NODE_ENV 为 production 才会生效&#xff01; 解决 直接修改生产环境的配置 NODE_ENV 为 production 直接覆…

融资3亿美元——月之暗面:AI大模型领域的新星

月之暗面&#xff0c;这个名字在AI领域引起了不小的震动。作为国内大模型创业企业的佼佼者&#xff0c;月之暗面以其独特的技术优势和商业模式&#xff0c;迅速在激烈的市场竞争中崭露头角。同时以其出色的长文本处理能力和创新的商业模式吸引了众多投资者的目光。 优牛企讯-企…

基于DETR模型实现交通标志检测

交通标志检测在自动驾驶和交通监控中是一个重要的问题。目标检测技术极大地促进了这一过程的自动化。本文实现基于DETR目标检测模型识别交通标志。 Tiny LISA交通标志检测数据集 本文数据集使用Kaggle上提供的Tiny LISA交通标志检测数据集(https://www.kaggle.com/datasets/mm…

手把手教你CNVD漏洞挖掘 + 资产收集

0x1 前言 挖掘CNVD漏洞有时候其实比一般的edusrc还好挖&#xff0c;但是一般要挖证书的话&#xff0c;还是需要花时间的&#xff0c;其中信息收集&#xff0c;公司资产确定等操作需要花费一定时间的。下面就记录下我之前跟一个师傅学习的一个垂直越权成功的CNVD漏洞通杀&#…