Qt调整轴不会调整图表本身

时间:2018-12-20 17:20:39

标签: c++ qt

我目前正在努力了解Qt中的折线图。由于某种原因,我的图表似乎显示出非常奇怪的行为。当我使用createDefaultAxis时,它将根据图表后面的Series的最小值和最大值设置最小值和最大值。虽然起初看起来还不错,但已经与this example中的行为有所不同。 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();
}

1 个答案:

答案 0 :(得分:0)

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);