Добрый день,
у меня есть класс DataReceiver, он работает в отдельном потоке. В mainwindow.cpp создаю экземпляр класса и переношу в другой поток:
dataReceiver = new DataReceiver(); dataReceiver->moveToThread(&receiverThread); receiverThread.start();
Теперь я хочу по приему данных в dataReceiver вывести эти данные в QTextEdit в MainWindow. Как это правильно сделать с точки зрения работы в разных потоках?
Стандартная практика - через механизм сигналов и слотов. dataReceiver генерирует сигнал, MainWindow его обрабатывает и в слоте помещает данные в свой QTextEdit. Какого рода данные нужно отображать?
@ai Одну строку QString. dataReceiver все свои данные упаковывает в нее.
@darkone Тогда так:
mainwindow.h:
private slots: void dataUpdatedSlot(QString data);
datareceiver.h:
signals: void dataUpdatedSignal(QString data);
mainwindow.cpp:
connect(dataReceiver, &DataReceiver::dataReceivedSignal, this, &MainWindow::dataReceivedSlot);
в datareceiver.cpp при готовности новых данных:
emit dataReceivedSignal(dataString);
в mainwindow.cpp эти данные будут получены в слоте:
void MainWindow::dataReceivedSlot(QString data) { ui->textEdit->setText(data); }