Правильный способ обновления QtCharts из рабочего потока?

так как это мой первый вопрос, я хотел сказать, что StackOverflow помог мне бесчисленное количество раз. Спасибо.

Теперь к моей проблеме. В настоящее время я пытаюсь реализовать простое приложение для сбора данных в Qt 5.8. Приложение должно связываться с DSP и получать некоторые напряжения с частотой от 100 Гц до 10 кГц. Поскольку мне нужно сделать некоторые дополнительные вычисления для полученных напряжений, я подумал, что было бы неплохо выполнить сбор данных и манипулирование ими в потоке, отличном от потока GUI.

Сбор данных и дополнительный расчет прекрасно работают в отдельном потоке. Мой вопрос: как правильно асинхронно отображать результаты рабочего потока, используя QtCharts?

Любой совет будет высоко ценится.

С наилучшими пожеланиями,

T.Krastev

4

Решение

Есть такая же проблема.
Я получил поток, который загружает данные в Model, После того, как это закончено, я позволяю потоку испустить сигнал DataLoadingDone, Это связано с разъемом в MainWindow с помощью Qt::QueuedConnection так это оценивается из 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();
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]