Отображение текста в графическом интерфейсе

В моем приложении Qt GUI есть 2 потока.

Поток без графического интерфейса пользователя очень часто получает данные через последовательный порт. Эти данные должны отображаться в графическом интерфейсе, который является основным потоком. Прокрутка также должна быть реализована.

Как мне это реализовать? Какие классы Qt следует использовать?


person Aham    schedule 15.12.2016    source источник
comment
Вам нужно добавить больше информации о вашем коде, почему именно для вашего последовательного порта используется отдельный поток? Как правило, обновление графического интерфейса должно выполняться только из основного потока. Вы можете переключиться на однопоточный дизайн или использовать межпоточные сигналы для обновления графического интерфейса. Вы можете взглянуть на пример терминала Qt .   -  person Mike    schedule 15.12.2016


Ответы (1)


Вам нужно отправить сигнал из потока, содержащего переменную QString, и создать слот в виджете, содержащий метку, для получения этих данных.

Документация: http://doc.qt.io/qt-5.7/signalsandslots.html< /а>

Здесь у вас есть базовый прототип для ваших нужд:

В вашем customthread.h

signals:
    portRead(QString text);

В вашем customthread.cpp

void process() //Your process function
{
    QString text = readFromSerialPort(); // Your function that reads the SP

    emit portRead(text)
}

В вашем mainwindow.h

slots:
    void setLabelText(QString text);

В вашем mainwindow.cpp

Widget::Widget(QWidget *parent)
{
    CustomThread *thread = new CustomThread();
    //Some code

    connect(thread,SIGNAL(portRead(QString)),this,SLOT(setLabelText(QString)));
}

void setLabelText(QString text)
{
    this->label->setText(text);
}
person Elcan    schedule 15.12.2016