加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从工作线程更新QtCharts的正确方法?

发布时间:2020-12-16 06:53:23 所属栏目:百科 来源:网络整理
导读:因为这是我的第一个问题,我想说StackOverflow帮了我无数次.谢谢. 现在我的问题.我目前正在尝试在Qt 5.8中实现一个简单的数据采集应用程序.该应用程序必须与DSP通信并以100Hz至10kHz的速率获取一些电压.由于我需要对获得的电压做一些额外的计算,我认为在与GUI
因为这是我的第一个问题,我想说StackOverflow帮了我无数次.谢谢.

现在我的问题.我目前正在尝试在Qt 5.8中实现一个简单的数据采集应用程序.该应用程序必须与DSP通信并以100Hz至10kHz的速率获取一些电压.由于我需要对获得的电压做一些额外的计算,我认为在与GUI线程不同的线程中进行数据采集和操作是个好主意.

数据采集??和附加计算在单独的线程中工作得很好.我的问题是,使用QtCharts异步显示工作线程结果的正确方法是什么?

任何建议都将深表感谢.

最好的祝福,

T.Krastev

解决方法

有类似的问题.
我有一个线程将数据加载到Model.在finshed之后我让线程发出信号DataLoadingDone.这通过Qt :: QueuedConnection连接到MainWindow中的一个插槽,因此它从GuiThread进行评估.否则我遇到QBarSet插槽抛出异常的问题.

MainWindow::MainWindow() {
  this->chart = new QChart();
  this->chartView = new QChartView(chart);

  this->series = new QBarSeries();
  this->mapper = new QHBarModelMapper(this);
  this->connect(this->myThread,SIGNAL(DataLoadingDone()),this,SLOT(MyThread_DataLoadingDone()),Qt::QueuedConnection);

  this->setWidget(this->chartView);
}


void MainWindow::MyThread_DataLoadingDone() {

  mapper->setFirstBarSetRow(0);
  mapper->setLastBarSetRow(0);


  mapper->setFirstColumn(0);
  mapper->setColumnCount(this->model->columnCount());

  mapper->setSeries(series);
  mapper->setModel(this->model);

  //only add at the first time
  //if we add this every time something goes wrong and 
  // multiple bars are displayed behind each other
  if (this->chart->series().count() == 0) {
    this->chart->addSeries(series);
    this->chart->createDefaultAxes();
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读