如何在工作线程中正确更新QtCharts?

7

由于这是我的第一个问题,我想说StackOverflow帮助了我无数次。谢谢。

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

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

任何建议都将不胜感激。

此致,

T.Krastev

1个回答

1

我遇到了类似的问题。
我有一个线程,将数据加载到一个Model中。当它完成后,我让线程发出一个信号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();
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接