【QT】QLineSeries无法绑定到QValueAxis?
series_ = new QLineSeries();...此处省略append数据
series_->attachAxis(axisX);
axisY->setMax(yMax);
axisY->setMin(yMin);
series_->attachAxis(axisY);
chart_->addAxis(axisX, Qt::AlignBottom);
chart_->addAxis(axisY, Qt::AlignLeft);
chart_->addSeries(series_);
该数据的第一个点即x=0,y=1,但是折线图上的点明显不在1上,那是因为整个折线的最大值和最小值跟yMax和YMin没有关系,假设此时我将yMax和Ymin改成0,100,那么此时Y轴的显示的值会变,但是整条折线图是不会发生任何变化的,所以说明折线图并没有跟Y轴绑定起来,所以问题是如何将折线图跟Y轴绑定起来,我改变Y轴的值,折线图也会随之发生变化 你遇到的问题可能是因为在给系列 (`QLineSeries`) 绑定轴 (`QValueAxis`) 前没有正确地添加至图表 (`QChart`) 中。需要按照正确的顺序进行设置。以下是确保轴和系列正确绑定的步骤:
1. **添加系列到图表:** 在将轴附加到系列之前,确保你的系列已经成功地添加到了图表中。添加系列的代码应该在`attachAxis`调用之前。
2. **设置轴的范围:** 轴的最小值和最大值需要在系列附加轴之前或者之后明确设置。
3. **调用图表的布局更新:** 一旦设置完成,可以调用`chart_->createDefaultAxes();`来更新图表的自动布局,以便在未绑定的情况下自动创建缺省轴。
以下是修正后的代码示例:
// 假设 axisX 和 axisY 已正确初始化
chart_->addSeries(series_);
// 先添加到图表,然后绑定轴
series_->attachAxis(axisX);
series_->attachAxis(axisY);
// 设置 Y 轴范围(确保在 attachAxis 的前后都可以设置)
axisY->setRange(yMin, yMax);
// 添加轴到图表,放在 attachAxis 之后
chart_->addAxis(axisX, Qt::AlignBottom);
chart_->addAxis(axisY, Qt::AlignLeft);
// 或更新图表的轴
chart_->createDefaultAxes();
通过这种方式,确保系列和轴之间的绑定正确进行。记得在数据更改或更新后,可能需要重新设置或刷新轴的范围,确保图表更新到最新状态。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 chart_ = new QChart();
series_ = new QLineSeries();
chart_->addSeries(series_);
QValueAxis* axisX = new QValueAxis;
axisX->setMin(0);
axisX->setMax(10);
axisX->setTickCount(11);
axisX->setLabelsAngle(-80);
series_->attachAxis(axisX);
QValueAxis* axisY = new QValueAxis;
for (int i = 0; i <= 10; i++) {
double yData = net_worth_model_->data(net_worth_model_->index(i, 2)).toDouble();
series_->append(i, i);
}
axisY->setRange(0, 100);
chart_->addAxis(axisX, Qt::AlignBottom);
chart_->addAxis(axisY, Qt::AlignLeft);
chart_->setTitle("净值表");
chart_->legend()->setVisible(true);
chart_->legend()->setAlignment(Qt::AlignBottom);
//chart_->update();
//chart_->createDefaultAxes();
series_->setName("净值");
chartView_ = new CustomChartView(chart_);
按照你说的顺序,实际图表还是没有按照Y轴设置的大小来变化,如代码所示,我现在设置的Y的范围为0-100,但是改成0-10,表格没有发生任何变化{:10_266:} zbc85221075 发表于 2024-11-07 00:35
chart_ = new QChart();
series_ = new QLineSer ...
看起来问题可能出在轴的附加顺序和数据添加的顺序上。确保在将轴附加到系列之前,数据已经被添加到系列中,并且在附加轴之后,图表的布局被正确更新。以下是一些可能的调整:
1. **确保数据在附加轴之前添加:** 确保在调用 `series_->attachAxis(axisY);` 之前,数据已经被添加到 `series_` 中。
2. **附加轴到系列:** 确保 `axisY` 也被附加到 `series_`。
3. **更新图表布局:** 在附加轴之后,调用 `chart_->createDefaultAxes();` 或者 `chart_->update();` 来确保图表布局更新。
以下是调整后的代码示例:
chart_ = new QChart();
series_ = new QLineSeries();
// 添加数据到系列
for (int i = 0; i < net_worth_model_->rowCount(); ++i) {
double value = net_worth_model_->data(net_worth_model_->index(i, 2)).toDouble();
series_->append(i, value);
}
chart_->addSeries(series_);
QValueAxis* axisX = new QValueAxis;
axisX->setMin(0);
axisX->setMax(10);
axisX->setTickCount(11);
axisX->setLabelsAngle(-80);
chart_->addAxis(axisX, Qt::AlignBottom);
series_->attachAxis(axisX);
QValueAxis* axisY = new QValueAxis;
axisY->setRange(0, 100);
chart_->addAxis(axisY, Qt::AlignLeft);
series_->attachAxis(axisY);
chart_->setTitle("净值表");
chart_->legend()->setVisible(true);
chart_->legend()->setAlignment(Qt::AlignBottom);
// 更新图表布局
chart_->update();
series_->setName("净值");
chartView_ = new CustomChartView(chart_);
确保在附加轴之前,数据已经被添加到系列中,并且在附加轴之后,图表的布局被更新。这样可以确保图表根据轴的设置正确显示。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 按照你的做法,正确显示了,感谢! zbc85221075 发表于 2024-11-07 00:55
按照你的做法,正确显示了,感谢!
不客气!很高兴能够帮到你。如果你还有其他问题或需要进一步的帮助,请随时提问。祝你在使用Qt时一切顺利!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]