白昼皓月 2024-03-10 17:13 采纳率: 0%
浏览 53

qtcharts图表数据更新无反应

qt文件获取到数据后将数据更新到图表

void hum_wdiget::syn_hum_charts(int data_hum)
{
    qDebug() << "syn_hum_charts called with hum = " << data_hum;
    second++;
    series_hum->append(second, data_hum);
    chart_hum->update();
    qDebug() << "syn_hum_charts " <<data_hum;
}

但是运行后图表没有任何变化,但是打印测试数据都正常

img

源码

#include "hum_wdiget.h"
#include "ui_hum_wdiget.h"

hum_wdiget::hum_wdiget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::hum_wdiget)
{
    ui->setupUi(this);

    char_hum_init(); //初始化

    create_hum_charts(); //创建图表

    // 连接定时器的timeout信号到槽函数,时间到时就刷新图表
    connect(timer, &QTimer::timeout, this, &hum_wdiget::get_hum_charts);
    // 设置定时器间隔为1000毫秒(1秒)
        timer->start(2000);

}

//同步
void hum_wdiget::get_hum_charts()
{
    emit requestData();
}

void hum_wdiget::setData(int humidity)
{
      hum = humidity;
//    qDebug() << hum;
    syn_hum_charts(hum);

}

void hum_wdiget::syn_hum_charts(int data_hum)
{
    qDebug() << "syn_hum_charts called with hum = " << data_hum;
    second++;
    series_hum->append(second, data_hum);
    chart_hum->update();
    qDebug() << "syn_hum_charts " <<data_hum;
}


//创建
void hum_wdiget::create_hum_charts()
{

    //设置折线
    series_hum->setName("湿度");
    series_hum->setPointLabelsVisible(true);    //设置显示数字
    series_hum->setPointsVisible(true);         //设置显示点
    series_hum->setPointLabelsFormat("@yPoint");    //设置只显示y轴

    //设置坐标轴
    axis_hum->setRange(0, 100);
    axis_hum->setTitleText("时间(秒)");
    ayis_hum->setRange(0, 100);
    ayis_hum->setTitleText("湿度(百分比)");

    //创建表
    chart_hum = new QChart();
    chart_hum->setTitle("湿度折线");
    chart_hum->addAxis(axis_hum,Qt::AlignBottom);   //x轴添加到底部
    chart_hum->addAxis(ayis_hum, Qt::AlignLeft);    //y轴添加到左侧
    chart_hum->setMargins(QMargins(10, 10, 10, 10));
    chart_hum->legend()->setVisible(true);
    chart_hum->addSeries(series_hum);

    //序列添加到坐标轴
    series_hum->attachAxis(axis_hum);
    series_hum->attachAxis(ayis_hum);

    //设置视图
    view_hum.setChart(chart_hum);
    view_hum.setRenderHint(QPainter::Antialiasing);

    // 将视图添加到布局中)
    vbox_hum->addWidget(&view_hum);
    setLayout(vbox_hum);
    // 调整视图大小以适应其内容
    view_hum.fitInView(chart_hum->plotArea(), Qt::KeepAspectRatio);

}

//初始化
void hum_wdiget::char_hum_init()
{
//    widgt = new Widget();
    timer = new QTimer(this);
    chart_hum = new QChart();
    series_hum = new QLineSeries();
    vbox_hum = new QVBoxLayout();
    axis_hum = new QValueAxis;
    ayis_hum = new QValueAxis;
}


hum_wdiget::~hum_wdiget()
{
    delete ui;
}


void hum_wdiget::setPort(int newPort)
{
    port = newPort;
}

void hum_wdiget::setHum(int newHum)
{
    hum = newHum;
}

int hum_wdiget::getPort() const
{
    return port;
}

int hum_wdiget::getHum() const
{
    return hum;
}


  • 写回答

5条回答 默认 最新

  • 关注

    白昼皓月 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    问题分析: 根据提供的代码,数据已经成功获取并更新到了图表的数据序列中,但是图表界面没有任何变化。这可能是因为在更新图表数据后,没有调用重新绘制图表的方法。

    解决方案:

    1. 确保数据获取和更新的函数syn_hum_charts()被正确调用,可以使用qDebug()函数进行调试,确保数据正确传递到函数中。
    2. 在更新完数据后,调用chart_hum->update()方法重新绘制图表。
    3. 确保图表视图view_hum已经正确添加到布局中,并在适当的时候进行重绘。

    修改后的代码如下:

    void hum_wdiget::syn_hum_charts(int data_hum)
    {
        qDebug() << "syn_hum_charts called with hum = " << data_hum;
        second++;
        series_hum->append(second, data_hum);
        chart_hum->update();
        view_hum.repaint(); // 重新绘制视图
        qDebug() << "syn_hum_charts " << data_hum;
    }
    
    // 在创建图表后添加以下代码
    chart_hum->update(); // 更新图表,确保显示最新数据
    
    

    请根据上述解决方案修改你的代码,并重新测试。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日

悬赏问题

  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用