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 这个开源框架, 用了它,腰不疼,腿不酸了 ... 添加依赖 ...
随机推荐
- 能够伪装为 win 10 的 kali 体验与中文设置
前言 作为习惯性捣鼓各类操作系统,时长也会使用 Kali 系统,之前看到有新的版本发行 传闻这个版本和之前的版本在系统界面和壁纸上都做了更新,还能一键设置 win 10 的系统界面 对此决定下载体验一 ...
- Codeforces Round #576 (Div. 2) D. Welfare State
http://codeforces.com/contest/1199/problem/D Examples input1 output1 input2 output2 Note In the firs ...
- 29)PHP,自动加载类
(1)作用: 类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类. (2)什么叫做“需要一个类”?通常是这样的情况: 1,创建一个 ...
- Nginx的下载与安装
.创建文件输入网页中需要复制的 cat >/etc/yum.repos.d/nginx.repo<<EOF [nginx-stable] name=nginx stable repo ...
- Java面试题1-附答案
List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高 ...
- python+selenium自动化测试之登录
selenium_login.py import unittest from selenium import webdriver class LoginTest(unittest.TestCase): ...
- docker E: Unable to locate package nginx
在使用docker容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要安装vim,可是当你敲apt-get install vim命令时 ...
- CentOS 6.5 搭建DNS服务器
1.安装bind yum install -y bind 2.修改named.conf主配置文件 vim /etc/named.conf 图中圈中的地方改为any 3.配置正向.反向解析 vim /e ...
- basecalling|vector mark|Assembly的难题|
生物信息学 染色体可以据染色图谱判断染色体号码,1-22号染色体依次变短,它们影响机体发育,23号染色体决定性别.肿瘤是由于遗传密码变异造成的.因此,遗传密码的解读非常重要,但是因为遗传密码长度非常长 ...
- EROS安装(windows)
版本查看 基础环境安装 npm i eros-cli -g