так как это мой первый вопрос, я хотел сказать, что StackOverflow помог мне бесчисленное количество раз. Спасибо.
Теперь к моей проблеме. В настоящее время я пытаюсь реализовать простое приложение для сбора данных в Qt 5.8. Приложение должно связываться с DSP и получать некоторые напряжения с частотой от 100 Гц до 10 кГц. Поскольку мне нужно сделать некоторые дополнительные вычисления для полученных напряжений, я подумал, что было бы неплохо выполнить сбор данных и манипулирование ими в потоке, отличном от потока GUI.
Сбор данных и дополнительный расчет прекрасно работают в отдельном потоке. Мой вопрос: как правильно асинхронно отображать результаты рабочего потока, используя QtCharts?
Любой совет будет высоко ценится.
С наилучшими пожеланиями,
T.Krastev
Есть такая же проблема.
Я получил поток, который загружает данные в 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();
}
}
Других решений пока нет …