Qt编程技巧总结篇(1)- 画图方面

文章目录

  • Qt编程技巧总结篇(1)
    • 鼠标左键显示坐标位置
    • 鼠标右键拖拽
    • 鼠标滚轮放大缩小
  • 小结

Qt编程技巧总结篇(1)

  看了许多的关于C++的Qt编程blog,但总有点乱,现在抽出时间对其中关于画图的一些函数进行梳理,距离学习时间有差不多两三个星期了,有些东西可能记得不太清晰了,以后要常做总结整理,一定要及时,不能:今天的事明天去做,或者,逗一点说,明天的事情后天去做。开整~
  这部分内容需要在QChart库下进行实验,另外有一点需要提前说一下,使用鼠标相关函数库进行函数重载,需要搞清楚鼠标的作用域是哪里,例如,我在Widget界面内放置了一个QWChartView类,我在Widget界面对应的.h文件内重写mousePressEvent事件,这样就会导致鼠标作用域不明确,所以如果创建了一个QWChartView类,最好对应为这个QWChartView类创建一个.h文件与.cpp文件,至于创建的具体流程和一些内容可以参考《 QT5.9 c++ 开发指南》鼠标操作功能图形这篇文章进行学习哦。
  下面的功能我们在“qwchartview.h”文件内创建函数头,在“qwchartview.cpp”文件内进行具体实现。

鼠标左键显示坐标位置

在这里插入图片描述
需要注意鼠标的移动过程需要实时显示位置坐标,在“qwchartview.h”中声明函数为:

protected:void mousePressEvent(QMouseEvent *event);   //鼠标键按下void mouseMoveEvent(QMouseEvent *event);    //鼠标移动

在实现函数为:

void QWChartView::mousePressEvent(QMouseEvent *event)
{//鼠标左键按下,记录beginPointif (event->button()==Qt::LeftButton){beginPoint=event->pos();}if(event->button()==Qt::RightButton){lastPos =event->pos();}QChartView::mousePressEvent(event);
}void QWChartView::mouseMoveEvent(QMouseEvent *event)
{//鼠标移动事件QPoint  point;point=event->pos();emit mouseMovePoint(point);QChartView::mouseMoveEvent(event);
}

其中,鼠标点击的右键的位置,这里也给记下来了,后续有用。

鼠标右键拖拽

在“qwchartview.h”中声明函数为:

protected:void mouseReleaseEvent(QMouseEvent *event); //鼠标释放左键

在实现函数为:

void QWChartView::mouseReleaseEvent(QMouseEvent *event)
{if (event->button()==Qt::RightButton){// 右键拖动曲线curPos=event->pos();QPoint offset = curPos-lastPos;
//        qDebug()<<lastPos.x()<<lastPos.y();
//        qDebug()<<curPos.x()<<curPos.y();chart()->scroll(-offset.x(),offset.y());lastPos = curPos;}QChartView::mouseReleaseEvent(event);
}

鼠标滚轮放大缩小

在“qwchartview.h”中声明函数为:

protected:void wheelEvent(QWheelEvent *event);        // 滚轮事件

在实现函数为:

void QChartView::wheelEvent(QWheelEvent *event)
{QPoint delta = event->angleDelta();double xPos = event->pos().x();double yPos = event->pos().y();if(xPos>=60 && xPos<=ui->chartView->width()-40&& yPos>=80 && yPos>=ui->chartView->height()-50){double leftM = axisX->min();double rightM = axisX->max();double widthM = rightM-leftM;double curPos = ((xPos-60)/(ui->chartView->width()*0.75))*widthM+leftM;double leftC,rightC;if(delta.y()>0){if(widthM>=0){leftC = leftM+(curPos-leftM)*0.05;rightC = rightM-(curPos-rightM)*0.05;axisX->setRange(leftC,rightC);}}else{leftC = leftM-(curPos-leftM)*0.05;rightC = rightM+(curPos-rightM)*0.05;if(leftC<=xMinValue){leftC = xMinValue;}if(rightC>=xMaxValue){rightC = xMaxValue;}axisX->setRange(leftC,rightC);}}else if(xPos>=0 && xPos<ui->chartView->width()/5&& yPos>=80 && yPos<ui->chartView->height()-50){double leftM = axisY->min();double rightM = axisY->max();double heightM = rightM-leftM;double curPos = ((yPos-80)/(ui->chartView->height()*0.75))*heightM+leftM;double leftC,rightC;if(delta.y()>0){if(heightM>=0){leftC = leftM+(curPos-leftM)*0.05;rightC = rightM-(curPos-rightM)*0.05;axisY->setRange(leftC,rightC);}}else{leftC = leftM-(curPos-leftM)*0.05;rightC = rightM+(curPos-rightM)*0.05;if(leftC<=yMinValue){leftC = yMinValue;}if(rightC>yMaxValue){rightC = yMaxValue;}axisY->setRange(leftC,rightC);}}

这里鼠标的滚轮单独放大X轴或Y轴。

小结

  抓紧时间学习,好多功能特别的实用,但需要自己逐一地学习实验,在具体的工程中运用是最快最有效的学习途径,继续加油吧。

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

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

相关文章

嵌入式学习day34 网络

TCP包头: 1.序号:发送端发送数据包的编号 2.确认号:已经确认接收到的数据的编号(只有当ACK为1时,确认号才有用) TCP为什么安全可靠: 1.在通信前建立三次握手连接 SYN SYNACK ACK 2.在通信过程中通过序列号和确认号保障数据传输的完整性 本次发送序列号:上次…

Elasticsearch:使用 Streamlit、语义搜索和命名实体提取开发 Elastic Search 应用程序

作者&#xff1a;Camille Corti-Georgiou 介绍 一切都是一个搜索问题。 我在 Elastic 工作的第一周就听到有人说过这句话&#xff0c;从那时起&#xff0c;这句话就永久地印在了我的脑海中。 这篇博客的目的并不是我出色的同事对我所做的相关陈述进行分析&#xff0c;但我首先…

Python错题集-8:AttributeError(找不到对应的对象的属性)

1问题描述 AttributeError: AxesSubplot object has no attribute arc 2代码详情 import matplotlib.pyplot as plt# 创建一个新的图形和坐标轴 fig, ax plt.subplots()# 定义弧线的参数 center (0.5, 0.5) # 圆心坐标 (x, y) width 1.0 # 半径 height 0.5 # 半径 ang…

怎么在学习强国网上发布文章,学习强国投稿发稿方法途径,附学习强国多少钱价格明细表

学习强国是一款受用户欢迎的学习软件&#xff0c;许多人希望在其平台上发布自己的文章&#xff0c;以分享和传播自己的学习成果和心得体会。那么&#xff0c;怎么在学习强国网上发布文章呢&#xff1f;接下来&#xff0c;我们将介绍一些投稿发稿的方法和途径。 首先&#xff0c…

Python使用lxml解析XML格式化数据

Python使用lxml解析XML格式化数据 1. 效果图2. 源代码参考 方法一&#xff1a;无脑读取文件&#xff0c;遇到有关键词的行再去解析获取值 方法二&#xff1a;利用lxml等库&#xff0c;解析格式化数据&#xff0c;批量获取标签及其值 这篇博客介绍第2种办法&#xff0c;以菜鸟教…

Vivado Repository IP Catalog 释疑

Vivado软件自带了一个IP核仓库&#xff0c;可以在IP Catalog界面查看。 在IP目录界面&#xff0c;依次给出了每个IP核的Name(名称)&#xff0c;Interface(接口)&#xff0c;State(状态)&#xff0c;License(许可证)和VLNV&#xff08;标识符&#xff09;。 Interface表示IP核的…

考研经验|如何从考研失败中走出来?

对我来说&#xff0c;太丢人了 其实我在本科的时候在同学眼中&#xff0c;一直很优秀&#xff0c;每年奖学金必有我的&#xff0c;国家励志奖学金&#xff0c;国家奖学金&#xff0c;这种非常难拿的奖学金&#xff0c;我也拿过&#xff0c;本科期间学校有一个公费去新西兰留学的…

数据分析-Pandas两种分组箱线图比较

数据分析-Pandas两种分组箱线图比较 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&am…

Java线程6种状态和工作原理详解,Java创建线程的4种方式

Java线程6种状态和工作原理详解&#xff0c;Java创建线程的4种方式 目录 一、Java线程的六种状态 二、Java线程是如何工作的&#xff1f; 三、BLOCKED 和 WAITING 的区别 四、start() 和 run() 源码分析 五、Java创建线程的所有方式和代码详解 1. 继承Thread类 2. 实现…

脚手架cli快速创建Vue2/Vue3项目

前言&#xff1a; 本文的nodejs版本是14.21.3 第一步 进入cmd窗口 1、全局安装webpack npm install webpack-g&#xff0c; npm install webpack-g 第二步 2、全局安装vue脚手架 npm install -g vue/cli 第三步 3、初始化vue项目 &#xff08;vue脚手架使用webpack模…

考研常识 | 专业硕士与学术硕士的11个区别

专业硕士与学术硕士的11个区别 对于考研学子而言&#xff0c;了解专业学位与学术学位的区别&#xff0c;是报考的第一步。学术学位研究生一般都是全日制的&#xff0c;而专业学位研究生的学习方式还分为即全日制与非全日制两种。这篇文章将带大家认识全日制专业学位与全日制学术…

Python docx学习笔记

个人学习笔记。 1 工具介绍 python-docx 是用于创建可修改 微软 Word 的一个 python 库&#xff0c;提供全套的 Word 操作&#xff0c;是最常用的 Word 工具。 1.1 基本概念 Document&#xff1a;是一个 Word 文档 对象&#xff0c;不同于 VBA 中 Worksheet 的概念&#xf…