Qt_QChart的使用记录(小白)
主要是记录柱状图的数值显示,散点图的点坐标显示(防止后续忘记,把文件都贴出来,方便复查)
资源库: WarehouseInputOrOutput.pro
QT += core gui
QT += charts greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = WarehouseInputOrOutput
TEMPLATE = app DEFINES += QT_DEPRECATED_WARNINGS SOURCES += main.cpp\
warehouseinputoroutput.cpp \
callout.cpp HEADERS += warehouseinputoroutput.h \
callout.h FORMS += warehouseinputoroutput.ui
头文件:WarehouseInputOrOutput.h
#ifndef WAREHOUSEINPUTOROUTPUT_H
#define WAREHOUSEINPUTOROUTPUT_H #include <QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts> namespace Ui {
class WarehouseInputOrOutput;
} class WarehouseInputOrOutput : public QMainWindow
{
Q_OBJECT public:
explicit WarehouseInputOrOutput(QWidget *parent = );
~WarehouseInputOrOutput();
void initData();
QChart* setBarData();
QChart* setSeatterData();
QChart* setChartNature(QChart* chart); private:
Ui::WarehouseInputOrOutput *ui; }; #endif // WAREHOUSEINPUTOROUTPUT_H
定义:WarehouseInputOrOutput.cpp
#include "warehouseinputoroutput.h"
#include "ui_warehouseinputoroutput.h"
#include <QtCharts/QValueAxis>
#include <QtCharts>
#include <qlabel.h>
#include <QtGui/QMouseEvent>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout> WarehouseInputOrOutput::WarehouseInputOrOutput(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::WarehouseInputOrOutput)
{ ui->setupUi(this); initData();
} WarehouseInputOrOutput::~WarehouseInputOrOutput()
{
delete ui;
} QChart* WarehouseInputOrOutput::setChartNature(QChart* chart)
{ chart->setTheme(QChart::ChartThemeLight); // 设置白色主题
chart->setDropShadowEnabled(true); // 背景阴影
// chart->addSeries(series); // 数据关联
chart->setTitleBrush(QBrush(QColor(, , ))); // 设置标题Brush
chart->setTitleFont(QFont("宋体")); // 设置标题字体 chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom); // 对齐方式:底部对齐
chart->legend()->setBackgroundVisible(true); // 设置背景 可见
chart->legend()->setAutoFillBackground(true); // 自动填充背景
chart->legend()->setColor(QColor(, , ));
chart->legend()->setLabelColor(QColor(, , ));
// chart->legend()->setMaximumHeight(50); // 设置高度
// chart->legend()->hide(); return chart;
} QChart* WarehouseInputOrOutput::setBarData()
{
QChart* barChart = new QChart();
QBarSet* set0 = new QBarSet("入库数");
QBarSet* set1 = new QBarSet("出库数");
QBarSet* set2 = new QBarSet("存量数");
int maxXCount = ;
int maxYCount = ; // testData
QMap<int, int> barData;
for(int i = ; i < ; ++i)
{
barData[i] = i * + ;
}
for(int i = ; i < ;++i)
{
set0->append(barData[i]);
set1->append(barData[ - i]);
}
for(int i = ; i < maxXCount; ++ i)
{
set2->append(i * );
}
set0->setLabelColor(Qt::black);
set1->setLabelColor(Qt::red);
set2->setLabelColor(Qt::cyan); QBarSeries* series = new QBarSeries();
series->append(set0);
series->append(set1);
series->append(set2);
series->setVisible(true);
series->setLabelsVisible(true);
// 柱状图数字显示在最上方
series->setLabelsPosition(QAbstractBarSeries::LabelsInsideBase); setChartNature(barChart);
barChart->addSeries(series);
barChart->setTitle("出入库统计"); QCategoryAxis* axisX = new QCategoryAxis();
axisX->setStartValue(-0.5);
for(int i = ; i < maxXCount + ; ++ i)
axisX->append("物料" + QString::number(i), i - 0.5); QValueAxis *axisY = new QValueAxis;
axisY->setRange(, maxYCount); //改为setRange(0,1);则表示坐标为动态计算大小的
axisY->setTitleText("数量");
axisY->setLabelFormat("%d"); barChart->setAxisX(axisX, series);
barChart->setAxisY(axisY, series);
series->attachAxis(axisX);
series->attachAxis(axisY); return barChart;
} QChart* WarehouseInputOrOutput::setSeatterData()
{
QChart* seatterChart = new QChart();
int maxXCount = ;
int maxYCount = ;
setChartNature(seatterChart);
seatterChart->setTitle("存量数"); QCategoryAxis* axisX = new QCategoryAxis();
// axisX->setMin(0);
axisX->setMax(maxXCount);
axisX->setStartValue();
for(int i = ; i < maxXCount + ; ++ i)
axisX->append("timer" + QString::number(i), i); QValueAxis* axisY = new QValueAxis();
axisY->setRange(, maxYCount);
axisY->setTitleText("存量");
axisY->setLabelFormat("%d");
QScatterSeries* seatter = new QScatterSeries();
for(int i = ;i < maxXCount + ; ++i)
seatter->append(i - 0.5, i * );
seatter->setPen(QPen(Qt::NoPen));
seatter->setColor(QColor(, , ));
// 设置散点大小
seatter->setMarkerSize();
// 设置散点样式
// seatter->setMarkerShape(QScatterSeries::MarkerShapeRectangle);
seatter->setName("存量");
// 显示设定点的坐标值
seatter->setPointLabelsFormat("(@xPoint, @yPoint)");
seatter->setPointLabelsVisible(true);
seatterChart->addSeries(seatter);
seatter->attachAxis(axisX); seatter->attachAxis(axisY); seatterChart->setAxisX(axisX, seatter); seatterChart->setAxisY(axisY, seatter); return seatterChart; } void WarehouseInputOrOutput::initData() { QChart* barChart = new QChart(); barChart = setBarData(); QChartView* showChart = new QChartView(barChart); QChart* seatterChart = new QChart(); seatterChart = setSeatterData(); QChartView* showSeatter = new QChartView(seatterChart); QGridLayout* gridLayout = new QGridLayout(); gridLayout->addWidget(showSeatter, , ); gridLayout->addWidget(showChart, , ); resize(, ); ui->centralWidget->setLayout(gridLayout); return; }
mian.cpp
#include "warehouseinputoroutput.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WarehouseInputOrOutput w;
w.show(); return a.exec();
}
补充个更新的函数,以便后续自查
// 更新坐标轴和数据
void WarehouseInputOrOutput::updateShow()
{
qDebug() << "enter the updateShow";
// 需计算的前置参数
int maxXCount = ; // x轴分割为几块
int maxYCount = ; // 出入库的浮动上限(传参时加10%方便显示)
int maxSeaterY = ; // 实际存量的上限(传参时加20%方便显示坐标) QBarSet* set0 = new QBarSet("入库数");
QBarSet* set1 = new QBarSet("出库数");
set0->setLabelColor(Qt::black);
set1->setLabelColor(Qt::red); int i = ;
QMap<QString, int>::const_iterator inIt;
QMap<QString, int>::const_iterator outIt;
for(inIt = m_InputSum.begin(), outIt = m_OutputSum.begin();i < maxXCount && inIt != m_InputSum.end() && outIt != m_OutputSum.end();++inIt, ++ outIt)
{
set0->append(inIt.value());
set1->append(outIt.value());
++i;
} // 出库数、入库数、存量数、日期
for(int i = ; i < maxXCount; ++i)
{
m_OutputSum["物料" + QString::number(i)] = i * ;
m_InputSum["物料" + QString::number(i)] = i * ;
m_StockSum["物料" + QString::number(i)] = i * ;
}
m_date = QDateTime::currentDateTime().toString("yyyy/MM/dd"); m_barChart->removeAllSeries();
QBarSeries* newSeries = new QBarSeries();
newSeries->append(set0);
newSeries->append(set1);
newSeries->setVisible(true);
newSeries->setLabelsVisible(true);
// 柱状图数字显示在最上方
newSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideBase);
m_barChart->addSeries(newSeries); // 移除原有数据,后续更新数据(update动作必须先移除原数据)
m_barChart->removeAxis(m_barChart->axisX());
m_barChart->removeAxis(m_barChart->axisY()); QCategoryAxis* axisX = new QCategoryAxis();
axisX->setStartValue(-0.5);
i = ; // 辅助位置
for(inIt = m_InputSum.begin(); inIt != m_InputSum.end() && i < maxXCount;++inIt)
axisX->append(inIt.key(), i++ - 0.5); QValueAxis *axisY = new QValueAxis;
axisY->setRange(, maxYCount * 1.1);
axisY->setTitleText("数量");
axisY->setLabelFormat("%d");
m_barChart->setAxisX(axisX, newSeries);
m_barChart->setAxisY(axisY, newSeries);
// 数据匹配坐标轴
newSeries->attachAxis(axisX);
newSeries->attachAxis(axisY); // 更新散点图数据
QScatterSeries* newSeatter = new QScatterSeries();
for(int i = ;i < maxXCount + ; ++i)
newSeatter->append(i - 0.5, i * );
// 设置散点大小
newSeatter->setMarkerSize();
newSeatter->setName("存量");
// 显示设定点的值
newSeatter->setPointLabelsFormat("@yPoint");
newSeatter->setPointLabelsVisible(true);
m_seatterChart->removeAllSeries();
m_seatterChart->addSeries(newSeatter); QCategoryAxis* seatterAxisX = new QCategoryAxis();\
seatterAxisX->setMax(1.1*maxXCount);
seatterAxisX->setStartValue();
QMap<QString, int>::const_iterator stockIt;
int i = ;
for(stockIt = m_StockSum.begin();stockIt != m_StockSum.end();++stockIt)
seatterAxisX->append(stockIt.key(), i++); QValueAxis* seatterAxisY = new QValueAxis();
seatterAxisY->setRange(, 1.2*maxYCount);
seatterAxisY->setTitleText("存量");
seatterAxisY->setLabelFormat("%d");
// 移除原有数据,添加新数据(update动作必须先移除原数据)
m_seatterChart->removeAxis(m_seatterChart->axisX());
m_seatterChart->removeAxis(m_seatterChart->axisY());
m_seatterChart->addAxis(seatterAxisX, newSeatter);
m_seatterChart->addAxis(seatterAxisY, newSeatter); // 数据匹配坐标轴
newSeatter->attachAxis(m_seatterChart->axisX());
newSeatter->attachAxis(m_seatterChart->axisY()); update();
}
seatterChart->addSeries(seatter);
Qt_QChart的使用记录(小白)的更多相关文章
- 我的第一次diy装机记录——小白的装机篇
接上一篇<我的第一次diy装机记录——小白的配置篇> 处理器 AMD Ryzen 5 2600X 六核主板 微星 B450M MORTAR (MS-7B89) ( AMD PCI 标准主机 ...
- 记录小白实习生的HashMap源码 put元素 的学习和一些疑问
首先看HashMap存储结构 transient Node<K,V>[] table; static class Node<K,V> implements Map.Entry& ...
- 我的第一次diy装机记录——小白的配置篇
工欲善其事,必先利其器 相对于IT人来说,电脑是个好东西,应该是第二个除了手机陪伴我们最长的东西.今年4月份来的杭州,留下了那款陪我征战4年的笔记本,没有电脑,下班后的夜晚索然无味,身心的需求也日渐强 ...
- 练手项目之image caption问题记录
小白一个,刚刚费了老大的劲完成一个练手项目--image caption,虽然跑通了,但是评估结果却惨不忍睹.于是贴上大神的作品,留待日后慢慢消化.顺便记录下自己踩坑的一些问题. 先膜拜下大神的作品. ...
- Anaconda折腾记(1)
Anaconda折腾记 谨此记录小白的我在Anaconda里面的摸爬滚打 更换更新源 可以不使用命令,直接进入C盘,进入user文件夹,进入当前的用户文件夹下,记得显示隐藏文件. 找到.condarc ...
- Ruby小白入门笔记之<个人记录档>
书写缘由 快两年的JAVA开发,因为来到一家新公司,产品需要用Ruby开发,故此才有了这从头开始,一入编程深似海啊...... 因为入门时是JAVA,所以理念跟规范早已形成,故此感觉突然采用Ruby编 ...
- openresty 的小白记录
openresty提供了一个快速访问数据库,快速响应的功能.基于lua + redis,我们可以做到快速响应,达到10k级连接的处理能力. openresty 的小白记录 好的学习资料,从lua到op ...
- elk5.4小白踩坑记录
搭建请参考:http://www.ywnds.com/?p=9776 搭建步骤:http://www.ywnds.com/?p=9776 初步解方案:先不用管这个提示,当你创建完索引后,接受数据后.一 ...
- 一个小白用 PhotoView 引起的学习记录
缘由(可跳过) 作为一个开发小白,有着各种各样想实现的功能, 最近想实现一个图片查看的功能(有放大,缩小等功能),发现了 PhotoView 这个开源框架, 用了它,腰不疼,腿不酸了 ... 添加依赖 ...
随机推荐
- php先响应后处理
php响应异步请求或者返回时效要求高的接口中,可以先响应输出,再执行逻辑处理保存数据等任务 ob_end_clean(); ob_start(); echo '{"data":&q ...
- LeetCode No.115,116,117
No.115 NumDistinct 不同的子序列 题目 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且 ...
- Docker系列一: docker简介及基本环境安装
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...
- yii执行流程简单介绍
1. 用户访问 http://www.example.com/index.php?r=post/show&id=1,Web 服务器执行入口脚本 index.php 来处理该请求. 2. 入口 ...
- linux下如何查看服务器的硬件配置信息
性能测试时一定要确定测试环境和的硬件配置.软件版本配置,保证和线上一致,才更接近真实环境. 那么linux下如何查看服务器的硬件配置信息?? 一.查看cpu信息 1.所有信息 lscpu [root@ ...
- 【Java集合】试读LinkedList源码
LinkedList的本质是双向链表.(01) LinkedList继承于AbstractSequentialList,并且实现了Dequeue接口. (02) LinkedList包含两个重要的成员 ...
- Archives: 2018/11
There are 35 posts in total till now. 11月 11, 2018 HTTP 11月 11, 2018 TCP与UDP 11月 10, 2018 Python测试 1 ...
- SQL语言:DDL,DML,DCL,DQL,TCL
DDL(Data Definition Language)数据库定义语言 statements are used to define the database structure or schema. ...
- 体验vSphere 6之1-安装VMware ESXi 6 RC版(转载)
体验vSphere 6之1-安装VMware ESXi 6 RC版 在2015年,各个公司都会发布一系列新的产品,例如Microsoft会发布Windows 10,VMware会发布vSphere 6 ...
- mudbox安装未完成,某些产品无法安装的解决方法
mudbox提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装mudbox失败提示mudbox安装未完成,某些产品无法安装,也有时候想重新安装mudbox的时候 ...