首页 > 其他分享 >qwtPlot实现清屏重绘

qwtPlot实现清屏重绘

时间:2022-12-29 15:38:00浏览次数:35  
标签:清屏 FlowPoint list flowPoint ui qwtPlot 重绘 append

#include "readflowpoint.h"
#include "qfile.h"
#include "qmessagebox.h"
#include "qwt_legend.h"
#include "qwt_plot_grid.h"
#include "qwt_scale_draw.h"
#include "qdatetime.h"
#include "qwt_series_data.h"
#include "qwt_plot_curve.h"

ReadFlowPoint::ReadFlowPoint(QWidget *parent, QString filepath)
	: QDialog(parent)
{
	ui.setupUi(this);
	ui.lineEdit_Time->setText(QDateTime::currentDateTime().toString("MM/dd/yyyy"));
	QList<QString> flowPoint_list = readFlowPointFile(filepath);
	writeFlowPointTable(flowPoint_list);//数据写入表格
	drawQwtPlotFlowPoint(flowPoint_list);//绘图
	connect(ui.lineEdit_Time, SIGNAL(editingFinished()), this, SLOT(dateChanged()));
}

void ReadFlowPoint::dateChanged()
{
	ui.qwtPlot_FlowPoint->detachItems(); //清除项
	timeJudgeList.clear();
	depthJudgeList.clear();
	QString timereceive = ui.lineEdit_Time->text();
	for (int i = 0; i < dateList.size(); i++)
	{
		if (dateList[i] == timereceive)
		{
			timeJudgeList.append(timeList[i]);
			depthJudgeList.append(depthList[i]);
		}
	}
	drawTidPointsPlot();
}

void ReadFlowPoint::setEnableAllAxis(bool yLeftEnable, bool yRightEnable, bool xBottomEnable, bool xTopEnable)
{
	ui.qwtPlot_FlowPoint->enableAxis(QwtPlot::yLeft, yLeftEnable);
	ui.qwtPlot_FlowPoint->enableAxis(QwtPlot::yRight, yRightEnable);
	ui.qwtPlot_FlowPoint->enableAxis(QwtPlot::xBottom, xBottomEnable);
	ui.qwtPlot_FlowPoint->enableAxis(QwtPlot::xTop, xTopEnable);
}

//将tidList数据转成点数据
QVector<QPointF> tidListConvertPoint(QStringList timeList, QStringList depthList) 
{
	QVector<QPointF> tidPointList;
	int counts = 0;
	QList<double> timeDoubleList,depthDoubleList;
	for (int i = 0; i < timeList.size(); i++)
	{
		counts++;
		QStringList xList = timeList[i].split(":");
		double mm = xList[0].toDouble();
		double sec = xList[1].toDouble();
		double secval = sec / 60;
		timeDoubleList.append(secval + mm);
	}
	for (int j = 0; j < depthList.size(); j++)
	{
		depthDoubleList.append(depthList[j].toDouble());
	}
	for (int k = 0; k < counts;k++)
	{
		QPointF tidPoint;
		tidPoint.setX(timeDoubleList[k]);
		tidPoint.setY(depthDoubleList[k]);
		tidPointList.append(tidPoint);
	}

	return tidPointList;
}

void ReadFlowPoint::drawTidPointsPlot()
{
	//设置坐标轴显示
	QVector<QPointF> tidPointList = tidListConvertPoint(timeJudgeList, depthJudgeList);
	setEnableAllAxis(true, false, true, true);
	//设置坐标轴刻度
	ui.qwtPlot_FlowPoint->setAxisScale(QwtPlot::xBottom, 0, 24, 1);
	ui.qwtPlot_FlowPoint->setAxisScale(QwtPlot::xTop, 0, 24, 1);
	//添加地图
	QwtPointSeriesData* series = new QwtPointSeriesData(tidPointList);
	QwtPlotCurve* curve1 = new QwtPlotCurve("时间\nCoor"); //设置line名称
	//设置数据
	curve1->setData(series);
	//把曲线附加到qwtPlot上
	curve1->attach(ui.qwtPlot_FlowPoint);
	curve1->setPen(QColor(255, 0, 0), 2, Qt::SolidLine);//设置画笔
	//添加格网
	QwtPlotGrid* grid = new QwtPlotGrid();
	grid->setPen(QColor(222, 222, 222), 1);
	grid->attach(ui.qwtPlot_FlowPoint);
	ui.qwtPlot_FlowPoint->insertLegend(new QwtLegend(), QwtPlot::BottomLegend);//添加图例
	ui.qwtPlot_FlowPoint->replot();
	ui.qwtPlot_FlowPoint->show();
}


void ReadFlowPoint::drawQwtPlotFlowPoint(QList<QString> flowPoint_list)
{
	//解析数据
	for (int i = 0; i < flowPoint_list.size(); i++)
	{
		QList<QString> flowPointDatas = flowPoint_list[i].split(" ");
		if (flowPointDatas.size() >= 3)
		{
			dateList.append(flowPointDatas[0]);
			timeList.append(flowPointDatas[1]);
			depthList.append(flowPointDatas[2]);
		}
	}
	ui.lineEdit_Time->setText(dateList[0]);   //设置默认数据日期为0;
	//绘图
	dateChanged();
}

QList<QString> ReadFlowPoint::readFlowPointFile(QString tid_path)  //return 验流点数据
{
	QList<QString> flowPoint_list;
	QFile file(tid_path);
	if (!file.open(QIODevice::ReadWrite|QIODevice::Text))
	{
		QMessageBox::warning(NULL, "文件打开", "文件打开失败");
	}
	while (!file.atEnd())
	{
		QByteArray line = file.readLine();
		QString str(line);
		flowPoint_list.append(str);
	}
	return flowPoint_list;
}

void ReadFlowPoint::writeFlowPointTable(QList<QString> flowPoint_list)
{
	//设置tableWidget表头内容
	ui.tableWidget_FlowPoint->setColumnCount(3);
	QStringList header;
	header.append(QString::fromLocal8Bit("日期"));
	header.append(QString::fromLocal8Bit("时间"));
	header.append("Corr");
	ui.tableWidget_FlowPoint->setHorizontalHeaderLabels(header);
	ui.tableWidget_FlowPoint->setRowCount(flowPoint_list.size());
	//设置宽度自适应
	ui.tableWidget_FlowPoint->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
	ui.tableWidget_FlowPoint->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
	//添加数据
	for (int i = 0; i < flowPoint_list.size(); i++)
	{
		QList<QString> flowPointDatas = flowPoint_list[i].split(" ");
		if (flowPointDatas.size() >= 3)
		{
			ui.tableWidget_FlowPoint->setItem(i, 0, new QTableWidgetItem(flowPointDatas[0]));
			ui.tableWidget_FlowPoint->setItem(i, 1, new QTableWidgetItem(flowPointDatas[1]));
			ui.tableWidget_FlowPoint->setItem(i, 2, new QTableWidgetItem(flowPointDatas[2]));
		}
	}
}

ReadFlowPoint::~ReadFlowPoint()
{
}

 

其中:::

最重要的是这句代码

    ui.qwtPlot_FlowPoint->detachItems(); //清除项

标签:清屏,FlowPoint,list,flowPoint,ui,qwtPlot,重绘,append
From: https://blog.51cto.com/u_15906863/5977818

相关文章

  • 回流(Reflow)与重绘(Repaint)
    哪些实际操作会导致回流与重绘最“贵”的操作:改变DOM元素的几何属性这个改变几乎可以说是“牵一发动全身”——当一个DOM元素的几何属性发生变化时,所有和它相关的节......
  • 重绘和回流
    为什么总说jQuery操作DOM耗费资源,那他消耗了个什么资源,他是怎么消耗的呢???咳咳,其实很简单的一玩意......
  • 回流与重绘
    前言在HTML中,每个元素都可以理解成一个盒子,在浏览器解析过程中,会涉及到回流与重绘:回流:布局引擎会根据各种样式计算每个盒子在页面上的大小与位置重绘:当计算好盒模型的位......
  • 什么是重排和重绘
    当浏览器下载完页面所需元素(html标记,css层叠样式表,javascript,图片)之后,会生成两个东西:Dom树和渲染树。Dom树Dom树,主要是用来表示页面的Dom结构。渲染树渲染树主要是用来表示......
  • Winform GDI 系列(2) 窗体边框重绘制
    ///<summary>///窗体边框重绘制///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidForm1_Paint(......
  • 什么是重排与重绘?
    参考文章网页性能管理详解——阮一峰1.网页生成的过程网页生成的过程,大致可以分为五步:HTML代码转换为DOMCSS代码转换为CSSOM(CSSObjectModel)结合DOM......
  • 怎样用git命令去切换分支? 1、清屏 clear 2、查看远程分支 git branch -a 3、查看本
    怎样用git命令去切换分支?1、清屏clear2、查看远程分支gitbranch-a3、查看本地分支gitbranch4、切换分支gitcheckout-bfeature-1.0.12-fixorigin/feature......
  • 重绘(repaints)和回流(reflow)
    重绘就是重新绘画,重绘是一个元素外观的改变所触发的浏览器行为,当给一个元素更换颜色、更换背景,虽然不会影响页面布局,但是颜色或背景变了,浏览器就会根据元素的新属性重新绘......
  • vue 用 input 和 canvas 标签实现前端背景图片的移动 重绘 上传
    前言:    闲得无聊写的,嫌麻烦的直接出门左转搜索vuecropper.js模块直接用就行正文:  首先我们要知道input是自带file方法的,直接可以选这文件上传就行,但为了......
  • 【汇编】最简单的汇编程序:实现清屏(.asm源码)
    项目环境编译环境:搭建一个nasm2.8的编译环境。镜像文件:采用winhex_18.2刷入编码。虚拟机:采用Bochs-2.4.5。项目软件傻瓜式环境配置。解压文件到D盘能直接使用。程序介绍汇编......