鱼C论坛

 找回密码
 立即注册
查看: 67|回复: 5

[已解决]【QT】QLineSeries无法绑定到QValueAxis?

[复制链接]
发表于 2024-11-6 21:08:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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轴的值,折线图也会随之发生变化
最佳答案
2024-11-7 00:43:15
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-6 21:17:36 | 显示全部楼层
你遇到的问题可能是因为在给系列 (`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-7 00:35:18 | 显示全部楼层
    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,表格没有发生任何变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-7 00:43:15 | 显示全部楼层    本楼为最佳答案   
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-7 00:55:19 | 显示全部楼层
按照你的做法,正确显示了,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-7 01:06:36 | 显示全部楼层
zbc85221075 发表于 2024-11-07 00:55
按照你的做法,正确显示了,感谢!


不客气!很高兴能够帮到你。如果你还有其他问题或需要进一步的帮助,请随时提问。祝你在使用Qt时一切顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 14:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表