QT: QGraphicsView no actualizar el interior del bucle

A. Kriegman:

Estoy tratando de hacer un dibujo para la pantalla en varias ocasiones desde el interior de un bucle infinito. Cuando trato de dibujar la imagen a la QGraphicsView, no se actualiza a menos que romper con el bucle. Aquí está mi función con el bucle infinito:

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

Y aquí es 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);
}

Tenga en cuenta que graphics_sceney rendered_imageson miembros de MainWindow. Si inserto una sentencia break después de mi llamada a DisplayQImagecontinuación, el primer fotograma hace, pero si no sale de la displayNoisefunción a continuación, el widget no se actualiza. He definido una señal de manera que cuando pulso Nque llama displayNoise, y sé que el bucle es un bucle. ¿Por qué no se muestra la imagen?

David Rin:

Es porque usted no está dando el tiempo para hacerlo eventloop de cosa. Su función es llamada desde el eventloop, y la prestación se llama desde el mismo eventloop, porque viven en el mismo hilo. Así que tienes dos opciones:

Creo que la primera opción es probablemente la forma más agradable.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=377276&siteId=1
Recomendado
Clasificación