Изменение текстового поля на форме из потока QML QT C++

275
10 октября 2017, 04:53

Пытаюсь изменить значение текстового поля из другого потока, но почему-то не работает( Имеется класс MyThread:

class MyThread : public QObject
{
  Q_OBJECT
  Q_PROPERTY(QString firstNumber READ GetFirstNumber WRITE SetFirstNumber NOTIFY firstNumberChanged)
  private:
    QThread *thread;
    NewClass *newCLass;
    QString firstNumber;
  private slots:
    void StartThread();
    void UpdateFirstValue (int i);
  public:
    explicit MyThread(QObject *parent = nullptr);
    QString GetFirstNumber();
    void SetFirstNumber(QString);
  signals:
    void firstNumberChanged();

};

Функция запуска потока

void MyThread::StartThread() 
{
   thread = new QThread;
   newClass = new NewClass();
   newClass->moveToThread(thread);
   connect(newClass, SIGNAL(sendfirstvalue(int)), this, SLOT(UpdateFirstValue(int)));
   thread->start();
} 

Изменение текстового поля:

void MyThread::UpdateFirstValue (int i)
{
   firstNumber = QString::number(i);
   emit firstNumberChanged();
}

Класс NewClass, функция которая работает в потоке:

void NewClass::Start()
{
   for(int i = 0; i < 3; i++)
   {
     emit sendfirstvalue(i);
     Sleep(1000);
   }
}

Класс MyThread связан с qml:

qmlRegisterType<MyThread>("NameModule", 1, 0, "TypeName");

qml файл:

import QtQuick 2.0
import QtQuick.Layouts 1.1
import NameModule 1.0
Rectangle {
id: content
TypeName{
        id: obj
    }
ColumnLayout {
    height: parent.height
    anchors.horizontalCenter: content.horizontalCenter
    Rectangle {
        Layout.fillHeight: true
        Text {
            anchors.horizontalCenter: parent.horizontalCenter
            id: firstNumber
            text: "f = " + obj.firstNumber
            font.bold: true
            onTextChanged: {
                console.log("firstNumberChanged");
            }
        }
    }
 }

Функция работает, значение firstNumber изменяется, но при этом не хочет отображаться в окне (onTextChanged у поля срабатывает только 1 раз), заранее спасибо.

READ ALSO
проект на mpi Test.exe вызвал срабатывание точки останова

проект на mpi Test.exe вызвал срабатывание точки останова

Простой код с использованием MPIПри сборке в релиз отладка останавливается в указанном месте на ветке else

329
C++ функция Split. Оптимизация

C++ функция Split. Оптимизация

Написал вот такие две функции для нахождения длины строки и разбиение ее на лексемыКак можно еще оптимизировать данный код, не используя...

384
Как скомпилировать программку в notepad++

Как скомпилировать программку в notepad++

Я знаю, как компилировать программку в Sublime Text 3Надо просто нажать клавишу F7

268
Как на C++ записать сложную математическую формулу

Как на C++ записать сложную математическую формулу

Задание, составить программу, которая рассчитывает решение по формуле (прикреплена)Если непонятно, что это за ch1, ch2 и т

556