c++ - Qt 调整轴不会调整图表本身
问题描述
我目前正试图了解 Qt 中的折线图。出于某种原因,我的图表似乎表现出非常奇怪的行为。当我使用 createDefaultAxis 时,它将根据图表后面系列的最小值和最大值设置最小值和最大值。虽然这看起来不错,但它已经与此示例中的行为不同。那里的最小 Y 值是 1,但是轴上的最小值是 0。
起初,我认为这可能只是由于对 QChart 类的更改,所以我创建了自己的 Axis 并再次尝试。这次我将 y 轴范围设置为 0 到 100,x 轴范围设置为 1 到 52。此外,我将刻度数更改为 4 和 52。但是,图表看起来仍然像以前一样,似乎没有受到轴变化的影响。
我在此处包含了该程序的屏幕截图
我希望你能帮我解决这个问题。目标是使系列的值与轴上的值相匹配。
编辑:这是main.cpp:
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLineSeries *series = new QLineSeries();
series->append(0, 6);
series->append(2, 4);
series->append(3, 8);
series->append(7, 4);
series->append(10, 5);
*series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);
QChart *chart = new QChart();
chart->legend()->hide();
chart->addSeries(series);
QValueAxis *axisX = new QValueAxis();
axisX->setRange(1, 52);
axisX->setMin(1);
axisX->setMax(52);
axisX->setTickCount(52);
QValueAxis *axisY = new QValueAxis();
axisY->setRange(0, 100);
axisY->setMin(0);
axisY->setMax(100);
axisY->setTickCount(4);
chart->setAxisX(axisX);
chart->setAxisY(axisY);
chart->setTitle("Simple line chart example");
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(400, 300);
window.show();
return a.exec();
}
解决方案
不附加到任何轴,默认情况下series
它会缩放以利用图表的整个绘图区域。
您应该将series
创建的轴附加为:
//... After setting up your axis X and Y
chart->setAxisX(axisX);
chart->setAxisY(axisY);
//attach the series to the specific axis.
series->attachAxis(axisX);
series->attachAxis(axisY);
推荐阅读
- php - 循环遍历数组php中的数组
- javascript - JavaScript 测试 (mocha) 代码组织
- web-services - 从哪里开始学习 SOAP Web 服务(在 java 中)?
- vue.js - vue-test-utils shallowMount:每次测试的执行时间都会增长
- c# - 如何在 Unity 中显示来自 higcharts.com 的图表?- 使用 C#
- android - 从外部文件目录获取图片
- terraform - 跨地形计划和模块的变量?
- javascript - 数组作为字符串返回
- javascript - WebExtension:收集当前页面所有 iframe 的信息
- vba - VBA - 绕过 Application.evaluate 限制