QT:QGraphicsViewは内部ループから更新されません

A. Kriegman:

私は無限ループ内からを繰り返し、画面に絵を描くようにしようとしています。私はQGraphicsViewに絵を描くしようとすると、私はループから壊れていない限り、それは更新されません。ここで無限ループと私の機能は次のとおりです。

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私は私のコールの後にbreak文を挿入した場合DisplayQImage、最初のフレームはレンダリングが、私は終了していない場合はdisplayNoise機能し、その後ウィジェットは更新されません。私は私が押したときほど、信号を設定するNことが呼び出したdisplayNoise、と私はループがループしている知っています。なぜ画像が表示されていませんか?

デビッド・ライン川:

あなたはそれのことを行うためのイベントループの時間を与えていないからです。あなたの関数はイベントループから呼ばれている、と彼らは同じスレッドに住んでいるのでレンダリングは、同じイベントループから呼び出されます。だから、2つのオプションがあります。

私は最初のオプションは、おそらく最も素晴らしい方法だと思います。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377271&siteId=1