QT: QGraphicsView не обновляется из цикла - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь нарисовать картинку на экран несколько раз изнутри бесконечной l oop. Когда я пытаюсь нарисовать изображение в QGraphicsView, оно не обновляется, пока я не откажусь от l oop. Вот моя функция с бесконечным l oop:

void MainWindow::displayNoise() {
    QImage noise(WIDTH, HEIGHT, QImage::Format_RGB32);
    float t = 0;

    while (true) {
        // Populate noise

        rendered_image = noise;
        DisplayQImage(rendered_image);
        t += 0.200;
        std::this_thread::sleep_for(std::chrono::milliseconds(200));
    }
}

А вот DisplayQImage():

void MainWindow::DisplayQImage(QImage &i)
{
    QPixmap pixmap(QPixmap::fromImage(i));
    graphics_scene.addPixmap(pixmap);
    graphics_scene.setSceneRect(pixmap.rect());
    ui->scene_display->setScene(&graphics_scene);
}

Обратите внимание, что graphics_scene и rendered_image являются членами MainWindow. Если после моего вызова DisplayQImage я вставляю оператор break, то рендерится первый кадр, но если я не выйду из функции displayNoise, виджет не обновится. Я настроил сигнал так, чтобы при нажатии N он вызывал displayNoise, и я знаю, что l oop зацикливается. Почему картинка не отображается?

1 Ответ

2 голосов
/ 31 марта 2020

Это потому, что вы не даете событию oop время сделать это. Ваша функция вызывается из события l oop, а рендеринг вызывается из того же события l oop, потому что они живут в одном потоке. Таким образом, у вас есть два варианта:

Я думаю, что первый вариант, вероятно, самый хороший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...