Вызов QQuickPaintedItem::update() в рабочем потоке не перерисовывался ⇐ C++
-
Anonymous
Вызов QQuickPaintedItem::update() в рабочем потоке не перерисовывался
Использование Qt 5.15 с QML, C++.
Привет. Я работаю над своим собственным типом QML, который наследует класс QQuickPaintedItem.
В первой реализации изображение, которое нужно отрисовать, генерируется в методе paint, и это работает хорошо. Следующий код — моя первая простая реализация.
класс MyType: public QQuickPaintedItem { публика: // Вызовите эту функцию, когда изображение необходимо перерисовать недействительный NeedToDraw() { QQuickPaintedItem::update(); } void Paint(QPainter* Painter) переопределить { __PrepareImage(&изображение_); художник->drawImage(QPoint(0, 0), image_); } частный: // Генерируем @image __PrepareImage (изображение QImage*); частный: QImage image_; }; В этом коде основной поток (GUI) заблокирован до тех пор, пока не будет выполнен PrepareImage(). Проблема возникает, когда вызов PrepareImage() занимает много времени.
Поэтому я создал рабочий поток для подготовки изображения (это нормально, если изображения обновляются немного поздно). Следующий код — это то, что я хочу реализовать.
класс MyType: public QQuickPaintedItem { публика: // Вызовите эту функцию, когда изображение необходимо перерисовать недействительный NeedToDraw() { if (thread_ != nullptr && thread_->isRunning()) return; thread_ = QThread::create(__PrepareImage, this, &image_); поток_-> старт(); } void Paint(QPainter* Painter) переопределить { художник->drawImage(QPoint(0, 0), image_); } частный: // Генерируем @image и вызываем @QQuickPaintedItem::update __PrepareImage(изображение QImage*) { // Генерирует изображение QQuickPaintedItem::update(); } частный: QThread thread_ = nullptr; QImage image_; }; Единственное, что изменилось, — это вызов update() внутри рабочего потока, но он не отрисовывался; thread_ работал, но переопределенный метод paint() никогда не вызывался.
Не удалось найти упоминания о вызове update() в многопоточной документации Qt. Как я могу правильно вызвать update() в рабочем потоке?
Использование Qt 5.15 с QML, C++.
Привет. Я работаю над своим собственным типом QML, который наследует класс QQuickPaintedItem.
В первой реализации изображение, которое нужно отрисовать, генерируется в методе paint, и это работает хорошо. Следующий код — моя первая простая реализация.
класс MyType: public QQuickPaintedItem { публика: // Вызовите эту функцию, когда изображение необходимо перерисовать недействительный NeedToDraw() { QQuickPaintedItem::update(); } void Paint(QPainter* Painter) переопределить { __PrepareImage(&изображение_); художник->drawImage(QPoint(0, 0), image_); } частный: // Генерируем @image __PrepareImage (изображение QImage*); частный: QImage image_; }; В этом коде основной поток (GUI) заблокирован до тех пор, пока не будет выполнен PrepareImage(). Проблема возникает, когда вызов PrepareImage() занимает много времени.
Поэтому я создал рабочий поток для подготовки изображения (это нормально, если изображения обновляются немного поздно). Следующий код — это то, что я хочу реализовать.
класс MyType: public QQuickPaintedItem { публика: // Вызовите эту функцию, когда изображение необходимо перерисовать недействительный NeedToDraw() { if (thread_ != nullptr && thread_->isRunning()) return; thread_ = QThread::create(__PrepareImage, this, &image_); поток_-> старт(); } void Paint(QPainter* Painter) переопределить { художник->drawImage(QPoint(0, 0), image_); } частный: // Генерируем @image и вызываем @QQuickPaintedItem::update __PrepareImage(изображение QImage*) { // Генерирует изображение QQuickPaintedItem::update(); } частный: QThread thread_ = nullptr; QImage image_; }; Единственное, что изменилось, — это вызов update() внутри рабочего потока, но он не отрисовывался; thread_ работал, но переопределенный метод paint() никогда не вызывался.
Не удалось найти упоминания о вызове update() в многопоточной документации Qt. Как я могу правильно вызвать update() в рабочем потоке?
Мобильная версия