О, я не заметил аттач.
Можно сделать так:
class thread_data : public QThread
{
Q_OBJECT
public:
explicit thread_data(QObject *parent = 0);
protected:
void run();
signals:
void dataReady(QVector<double> data);
};
Когда поток отработает, выбросится сигнал dataReady(const QVector<double> data). Обрабатывать сигнал асинхронно (т.е.
не коннектиться с Qt::DirectConnection). Т.к. QVector<> шареный класс (implicitly shared), то по завершении потока его (поток) можно даже освободить. Т.о. клиент в своем слоте получает данные и ни от чего больше не зависит и ни за чем не следит.
Еще раз подчеркну, курвам в рабочем потоке не место (курвы имеют Pen'ы, Brush'ы - атрибуты гуя). Курвы предназначены для отрисовки, а не для хранения и транспортировки данных.
Ну и при таком простейшем сценарии в thread_data::run() exec() не нужен.
Я с Вами полностью согласен и QwtPlotCurve не место в вычислительном потоке, но пример тестовый (только-только начал использовать Qwt, да и чего таить и в С++, и Qt не особо силен, потому допускаю ошибки). На самом деле я так и задумал считать в одном потоке, рисовать в другом, и уже стал реализовывать, но запнулся на том, как передать четырехмерный массив и потом как с ним работать (обращаться к определенным ячейкам). Но это я разберусь, надеюсь, информация есть, надо почитать.
Ну и при таком простейшем сценарии в thread_data::run() exec() не нуженпросто смотрел как устроено. В коде видел, но что? как? зачем? и как работает? не понимал.
А вот по поводу
void dataReady(QVector<double> data);
, хотел спросить зарание, раз пошла такая пьянка. Про QVector читал, но не вникал, думаю разберусь, но сразу хотелсь бы узнать, как будет выглядеть это строка, но для четырехмерного массива?
Спасибо за советы!