直接按横纵坐标值绘制
QChartView *chartView = new QChartView(ui->graphicsView);
QChart *chart = new QChart();
chartView->setChart(chart);
chartView->setGeometry(0,0,this->width()-240,this->height()-25);
QLineSeries *series0 = new QLineSeries();
QLineSeries *series1 = new QLineSeries();
series0->setName("3A6B");
series1->setName("3A7B");
chart->addSeries(series0);
chart->addSeries(series1);
qreal t = 0, y1, y2, intv = 0.1;
int cnt = 200;
for(int i = 0; i < cnt; ++i){
y1 = qSin(t);
series0->append(t, y1);
y2=qCos(t);
series1->append(t,y2);
t+=intv;
}
chartView->setRenderHint(QPainter::Antialiasing);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(0, 10);
axisX->setTitleText("时间");
axisX->setLabelFormat("%.1f");
axisX->setTickCount(1);
axisX->setMinorTickCount(1);
QValueAxis *axisY = new QValueAxis;
axisY->setRange(-10,70);
axisY->setTitleText("温度");
axisY->setLabelFormat("%.1f");
axisY->setTickCount(10);
axisY->setMinorTickCount(4);
chart->setAxisX(axisX, series0);
chart->setAxisY(axisY, series0);
chart->setAxisX(axisX, series1);
chart->setAxisY(axisY, series1);
横坐标可能是时间戳, 那么显示就要友好点
- 注意,将数据(
时间戳(秒级))放到QLineSeries直线容器里,需要把时间戳转成毫秒级
QChartView *chartView = new QChartView(ui->graphicsView);
chartView->setRubberBand(QChartView::RectangleRubberBand);
QChart *chart = new QChart();
chart->scroll(-10, 5);
chart->zoom(0.9);
chartView->setChart(chart);
chartView->setGeometry(0, 0, this->width() - 240, this->height() - 25);
QLineSeries *series0 = new QLineSeries();
series0->setName("3A6B");
chart->addSeries(series0);
qreal t = 0, y1, y2, intv = 0.1;
int cnt = 200;
QMessageBox::information(nullptr, "info", QString::fromStdString(std::to_string(items.size())));
for (uint64_t i = 0; i < items.size(); ++i)
{
series0->append(items.at(i).timestamp*1000, items.at(i).temperature);
}
chartView->setRenderHint(QPainter::Antialiasing);
QDateTimeAxis* axisX = new QDateTimeAxis();
axisX->setFormat("M-d HH:mm s");
const uint64_t how_long_for_show = 60 * 60 * 2; ;
axisX->setMin(QDateTime::fromSecsSinceEpoch(time(0) - how_long_for_show));
axisX->setMax(QDateTime::fromSecsSinceEpoch(time(0)));
axisX->setTickCount(1);
axisX->setLabelsAngle(1);
QValueAxis *axisY = new QValueAxis;
axisY->setRange(-10, 70);
axisY->setTitleText("Temperature");
axisY->setLabelFormat("%.1f");
axisY->setTickCount(10);
axisY->setMinorTickCount(4);
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
series0->attachAxis(axisX);
series0->attachAxis(axisY);
series0->show();