设置轴的刻度格式
// axisX->setLabelFormat("%g");
%A 浮点数、十六进制数字和p-记法(C99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或%e.
%G 根据数值不同自动选择%f或%e.
%i 有符号十进制数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字0f的无符号十六进制整数
%X 使用十六进制数字0f的无符号十六进制整数
%% 打印一个百分号
设置散点图和线性图
dialogGUI.h
#ifndef DIALOG_GUI_H
#define DIALOG_GUI_H
#include <QDialog>
#include <QCache>
#include <QtCharts>
#include <QtCharts/QSplineSeries>
#include <QDateTime>
#include <QByteArray>
namespace Ui {
class DialogGUI;
}
class DialogGUI : public QDialog
{
Q_OBJECT
public:
explicit DialogGUI(QWidget *parent = 0);
~DialogGUI();
QList<QPointF > PointF;
void sltCategoriesChanged(QByteArray);
float publicFloatFun(QByteArray dat, quint8 basic_addres);
public slots:
private slots:
// void sltpushButton();
// void sltpushButton_2();
// void sltpushButton_3();
signals:
private:
Ui::DialogGUI *ui;
void initline();
QChart* m_chart;
QLineSeries* m_lineSeries;
QScatterSeries* m_scatterSeries;
QBarCategoryAxis* m_axis;
QValueAxis* m_axisY;
QValueAxis* m_axisX;
QChartView* m_chartView;
QList<int> m_list;
};
#endif // DialogGUI_H
dialogGUI.cpp
#include "dialogGUI.h"
#include "ui_dialogGUI.h"
#include <QtCharts/QAbstractAxis>
#include <QtCharts/QValueAxis>
#include <QtCore/QTime>
#include <QtCore/QDebug>
#include <QPen>
#include <QPainter>
#include <QtCharts\QLegendMarker>
#include <QChartView>
#define debug qDebug() << "[" << __FILE__ << ":" << __LINE__ << "]" // 调试
DialogGUI::DialogGUI(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogGUI)
{
ui->setupUi(this);
// initChart("name", 10, 50);
float a = 1.32;
float b = 5.56;
PointF.append(QPointF(a, b));
PointF.append(QPointF(3, 0));
PointF.append(QPointF(7, 6));
PointF.append(QPointF(9, 7));
PointF.append(QPointF(10, 6));
PointF.append(QPointF(8, 6));
PointF.append(QPointF(5, 2));
PointF.append(QPointF(7, 9));
PointF.append(QPointF(8, 6));
PointF.append(QPointF(15, 6));
// 初始化
initline();
}
DialogGUI::~DialogGUI()
{
delete ui;
}
/*-------------------------------------------------------------*/
void DialogGUI::initline()
{
m_chart = new QChart();
m_chart->setAnimationOptions(QChart::SeriesAnimations);
// 线性图
m_lineSeries = new QLineSeries(m_chart);
m_lineSeries->setPen(QPen(Qt::lightGray,2,Qt::SolidLine));
m_lineSeries->setColor(QColor(248, 167, 0));
// 散点图
m_scatterSeries = new QScatterSeries(m_chart);
m_scatterSeries->setMarkerShape(QScatterSeries::MarkerShapeRectangle); // 设置标志形状
m_scatterSeries->setMarkerSize(7); // 设置标记大小
// 将线性图和散点图添加到图表上
m_chart->addSeries(m_lineSeries);
m_chart->addSeries(m_scatterSeries);
m_chart->setTitle("单表标定点数"); // 设置曲线名字
// 循环添加
foreach (QPointF item, PointF) {
m_lineSeries->append(item); // 添加折线
m_scatterSeries->append(item); // 添加散点
}
// x轴
m_axisX = new QValueAxis;
m_axisX->setRange(0, 60); // 设置x轴范围
m_axisX->setTickCount(10); //设置多少格
m_axisX->setMinorTickCount(5); //设置每格小刻度线的数目
m_chart->setAxisX(m_axisX, m_lineSeries);
m_chart->setAxisX(m_axisX, m_scatterSeries);
// m_chart->createDefaultAxes(); // 创建默认轴
// m_chart->axisX()->setRange(0, 30); // 设置x轴范围
// m_chart->setAcceptTouchEvents(true); // 设置接受触摸事件
m_axisY = new QValueAxis;
m_axisY->setRange(0, 30); // 设置y轴范围
// m_axisY->setLabelFormat("%u"); //设置刻度的格式
// m_axisY->setGridLineVisible(true); // 设置网格线可见
m_axisY->setTickCount(10); //设置多少格
m_axisY->setMinorTickCount(5); //设置每格小刻度线的数目
m_chart->setAxisY(m_axisY, m_lineSeries);
m_chart->setAxisY(m_axisY, m_scatterSeries);
m_chart->legend()->setVisible(true);
m_chart->legend()->setAlignment(Qt::AlignBottom);
m_chart->legend()->hide(); // 隐藏图表说明
// 视图
m_chartView = new QChartView(m_chart);
m_chartView->setRenderHint(QPainter::Antialiasing); // 抗锯齿
// 设置主题
m_chartView->chart()->setTheme(QChart::ChartThemeBrownSand);
// 颜色
QPalette pal = window()->palette();
pal.setColor(QPalette::Window, QRgb(0x9e8965));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
window()->setPalette(pal); // 设置调色板
ui->verticalLayout->addWidget(m_chartView); // 将图表添加到ui上
}
// 槽函数,用于接收数据并显示到gui上
void DialogGUI::sltCategoriesChanged(QByteArray data)
{
m_lineSeries->clear();
m_scatterSeries->clear();
m_chart->axisX()->setRange(0, publicFloatFun(data ,3 + 29 * 8)); // 设置x轴范围
// m_axisX->setRange(0, publicFloatFun(data ,3 + 29 * 8)); // 设置x轴范围
m_axisY->setRange(0, publicFloatFun(data ,7 + 29 * 8)); // 设置y轴范围
for(uchar i = 0; i < 30; i++)
{
m_lineSeries->append(publicFloatFun(data ,3 + i * 8), publicFloatFun(data ,7 + i * 8)); // 添加折线
m_scatterSeries->append(publicFloatFun(data ,3 + i * 8), publicFloatFun(data ,7 + i * 8)); // 添加散点
}
debug << "刷新GUI数据";
}
// 公共函数
float DialogGUI::publicFloatFun(QByteArray dat, quint8 basic_addres)
{
union{
float a;
quint8 dat[4];
}f_to_dat;
f_to_dat.dat[0] = dat[basic_addres + 0];
f_to_dat.dat[1] = dat[basic_addres + 1];
f_to_dat.dat[2] = dat[basic_addres + 2];
f_to_dat.dat[3] = dat[basic_addres + 3];
return f_to_dat.a;
}
/*-------------------------------------------------------------*/