Мое приложение должно выполнять вычисления в фоновом потоке. OK, использовал пример из документации Qt, сделал так:
Worker *worker = new Worker(nullptr, 0.0, 100, 0.1);
worker->moveToThread(&background);
connect(&background, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &MainWindow::runCalculation, worker, &Worker::run);
connect(worker, &Worker::calculated, this, &MainWindow::plotComputedData);
connect(worker, &Worker::reportProgress,
[this] (int x) {
bar->setValue(x);});
background.start(QThread::HighPriority);
emit runCalculation();
//bar - QProgressBar
Теперь. Если я во время вычислений делаю emit reportProgress:
void Worker::run()
{
if (_data.size() > 0)
_data.clear();
int i = 0;
for (double x = _min; x < _max; x += _step, ++i)
{
_data.push_back(QPointF(x, getY(x)));
//emit reportProgress(i); //ЗДЕСЬ
QThread::msleep(10);
}
emit calculated(_data);
}
происходит сегфолт. emit calculated проходит нормально.
minimal working example: https://www.dropbox.com/s/thgxwc98fevi6v3/qwt-test2.tar.bz2?dl=0