[QCustomPlot] QCPBar绘制柱状图并同时显示柱状图的值

文章介绍了在使用QCustomPlot库绘制柱状图时,如何添加和定位QCPItemText来显示每个柱子的当前值。通过设置QCPItemText的位置和坐标系,以及使用QCPAxisTickerText自定义x轴标签,实现了柱状图的可视化增强。虽然QCustomPlot没有内置悬浮显示功能,但提供了变通的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

博主在使用 qcustomplot 绘制柱状图时,发现网络上的教程。大都忽略了一个重要的点就是。柱状图没有明显显示出当前的值。经过博主寻找后发现在 qcustomplot 论坛中已经有了对应的解决方案。所以记录一下。qcustomplot论坛

代码

void MainWindow::drawBars()
{
    QCPBars *bars = new QCPBars(ui->customplot->xAxis, ui->customplot->yAxis);

    QVector<double> key;
    QVector<double> value;
    for(int i = 0; i < 5; i++)
    {
        //QCPItemText的效果类似于一个label
        QCPItemText *itemText = new QCPItemText(ui->customplot);
        itemText->setClipToAxisRect(false);
        //设置itemText的位置是跟随坐标系的
        itemText->position->setType(QCPItemPosition::ptPlotCoords);
        //设置itemText跟随的坐标系为 ui->customplot->xAxis, ui->customplot->yAxis
        itemText->position->setAxes(ui->customplot->xAxis, ui->customplot->yAxis);
        //设置itemText放置的位置
        itemText->setPositionAlignment(Qt::AlignTop | Qt::AlignHCenter);
        key.append(i + 1);
        value.append((i + 1) * 1000 + 123);
        //设置itemText显示的内容
        itemText->setText(QString::number(value.at(i)));
        //设置itemText显示的位置的坐标
        itemText->position->setCoords(key.at(i), value.at(i));
    }
    bars->addData(key, value);
    QStringList keyList({QStringLiteral("一月份"), QStringLiteral("二月份"), QStringLiteral("三月份"), QStringLiteral("四月份"), QStringLiteral("五月份")});
    QSharedPointer<QCPAxisTickerText> tickerText(new QCPAxisTickerText);
    //每个x轴的数据对应的label
    tickerText->addTicks(key, keyList.toVector());

    //将 ui->customplot->xAxis的坐标轴上的ticker 和 tickerLabel 更换为自定义的 tickerText
    ui->customplot->xAxis->setTicker(tickerText);
    //设置 ui->customplot->xAxis 的范围,以便能够看到全部的柱状图
    ui->customplot->xAxis->setRange(0, key.length() + 1);
    //ui->customplot->yAxis 自适应范围
    ui->customplot->yAxis->rescale();

    //y轴的单位
    ui->customplot->yAxis->setLabel(QStringLiteral("CNY"));
    //重新绘制才能生效
    ui->customplot->replot();
}

效果图

在这里插入图片描述

思考

如果要做悬浮显示当前柱状图的值,对于 qcustomplot 来说并没有现成的接口。可能就要稍微麻烦一些,博主没有尝试。但是可以参考以下文章QCustomplot绘制柱状图及显示数据。最后有不懂的欢迎各位大佬在评论区交流

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值