当我更改 X 轴和 Y 轴时,QChart 点绘制不正确

问题描述 投票:0回答:3

我正在制作 QScatterSeries。我在 3 个不同系列(红、绿、蓝)中绘制了一些点。当我使用

chart->createDefaultAxes()
时,一切都完美地绘制出来。所有的点都在它们应该在的地方。问题是,当我更改图表中的 X 轴和 Y 轴时,所有点都会错误绘制。他们都没有在他们应该在的地方。这很奇怪,因为我已经硬编码了我的观点。

我尝试在将 X 轴和 Y 轴添加到图表之前和之后将我的系列添加到图表中,认为这可能导致我的观点变得混乱。但这并没有解决问题。

我使用默认轴时的图表:

    char *myargv[2];
    int myargc = 1;
    myargv[0] = strdup("");

    // First, create QApplication
    QApplication a(myargc, myargv);

    // Create our red, green, blue acceleration series
    redSeries = new QScatterSeries;
    redSeries->setMarkerSize(15.0);
    redSeries->append(1, 20);
    redSeries->append(2, 30);
    redSeries->append(3, 44);
    redSeries->setColor(Qt::red);

    greenSeries = new QScatterSeries;
    greenSeries->setMarkerSize(15.0);
    greenSeries->append(1, 10);
    greenSeries->append(2, -9);
    greenSeries->append(3, 20);
    greenSeries->setColor(Qt::green);

    blueSeries = new QScatterSeries;
    blueSeries->setMarkerSize(15.0);
    blueSeries->append(1, -20);
    blueSeries->append(2, -10);
    blueSeries->append(3, 0);
    blueSeries->setColor(Qt::blue);

    // Customize our chart
    QChart *chart = new QChart();
    chart->createDefaultAxes();
    chart->setTitle("Example Plot");
    QValueAxis *axisX = new QValueAxis;
    axisX->setRange(0, 130);
    axisX->setTickCount(10);
    QValueAxis *axisY = new QValueAxis;
    axisY->setRange(-50, 50);
    axisY->setTickCount(10);

    // Add series to chart
    chart->addSeries(redSeries);
    chart->addSeries(greenSeries);
    chart->addSeries(blueSeries);

    // Create chartView
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    //chartView->chart()->setAxisX(axisX);
    //chartView->chart()->setAxisY(axisY);
    
    // Render everything within our Window
    QMainWindow w;
    w.setCentralWidget(chartView);
    w.resize(400, 300);
    w.show();

    return a.exec();
}

当我尝试使用自己的 X 和 Y 轴时,我只需注释掉

chart->createDefaultAxes()
并在以下位置进行评论:

//chartView->chart()->setAxisX(axisX);
//chartView->chart()->setAxisY(axisY);

这导致我得到了错误绘制的图表:

我的问题是,我做错了什么?此外,在代码的其他部分,我计划动态接收数据并使用该数据在图表上绘制点,如下所示:

while (receivingData) {
    redSeries->append(x, y); // Will not work because my hard-coded points (above) do not work
    greenSeries->append(x, y);
    blueSeries->append(x, y);
}

我需要做什么才能确保所有点都使用自定义 X 轴和 Y 轴正确绘制?我假设我很可能需要在

append
中进行一些数学运算以匹配 QChart 的新维度,但我如何实现这一点?

c++ qt qchart
3个回答
0
投票

答案是,添加电话至

QAbstractSeries::attachAxis

某处, 我怀疑。


0
投票

我在另一篇文章中找到了我的问题的答案。

在这里发帖以防对某人有帮助 QtCharts 添加自定义轴


0
投票

来自 QChart::createDefaultAxes() 的文档:
注意:必须在所有系列添加到图表后调用此函数。此函数创建的轴不会自动附加到添加到图表的任何系列调用此函数后(…) ”.

但是,在稍后添加的系列上调用

QAbstractSeries::attachAxis()
也可以。

© www.soinside.com 2019 - 2024. All rights reserved.