Главная

Главная

Сообщество

Сообщество

Форум

Форум

STM32

STM32

Электроника

Электроника

Raspberry Pi

Raspberry Pi

Уведомления
Очистить всё

[Решено] Обновление GUI из другого потока в QT

(@darkone)
New member

Добрый день,

у меня есть класс DataReceiver, он работает в отдельном потоке. В mainwindow.cpp создаю экземпляр класса и переношу в другой поток:

dataReceiver = new DataReceiver();
dataReceiver->moveToThread(&receiverThread);
receiverThread.start();

Теперь я хочу по приему данных в dataReceiver вывести эти данные в QTextEdit в MainWindow. Как это правильно сделать с точки зрения работы в разных потоках?


Цитата
Автор темы Опубликовано : 12.11.2021 12:13
AI
 AI
(@ai)
Level 3 Moderator

Стандартная практика - через механизм сигналов и слотов. dataReceiver генерирует сигнал, MainWindow его обрабатывает и в слоте помещает данные в свой QTextEdit. Какого рода данные нужно отображать?


ОтветЦитата
Опубликовано : 12.11.2021 14:14
(@darkone)
New member

@ai Одну строку QString. dataReceiver все свои данные упаковывает в нее.


ОтветЦитата
Автор темы Опубликовано : 12.11.2021 18:27
AI
 AI
(@ai)
Level 3 Moderator

@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);
}

ОтветЦитата
Опубликовано : 13.11.2021 11:29
(@darkone)
New member

@ai спасибо за подробный ответ, идею уловил 😊 


ОтветЦитата
Автор темы Опубликовано : 14.11.2021 11:52
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.