首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从工作线程更新QtCharts的正确方式?

从工作线程更新QtCharts的正确方式?
EN

Stack Overflow用户
提问于 2017-04-05 21:19:45
回答 1查看 1K关注 0票数 7

因为这是我的第一个问题,所以我想说StackOverflow已经帮了我无数次。谢谢。

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

数据采集和额外的计算工作在单独的线程中进行得很好。我的问题是,使用QtCharts异步显示工作线程的结果的正确方式是什么?

如有任何建议,我们将不胜感激。

诚挚的问候,

T.Krastev

EN

回答 1

Stack Overflow用户

发布于 2017-08-17 20:48:56

遇到了同样的问题。

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

代码语言:javascript
运行
复制
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();
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43232456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档