graphicsView QObject でビデオを表示するコードを書いています。こんなふうになります:
void MainWindow::UpdateVideo()
{
cap >> frame;
cvtColor(frame, frame,CV_BGR2RGB);
QImage Qframe = QImage((uchar*) frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);
QPointer<QGraphicsScene> VideoScene = new QGraphicsScene;
VideoScene->addPixmap(QPixmap::fromImage(Qframe));
ui->VideoView->setScene(VideoScene);
ui->VideoView->show();
}
void MainWindow::on_pushButton_2_clicked()
{
cap.open("test1.mpg");
if(!cap.isOpened())
cout<<"CANNOT OPEN FILE"<<endl; //or you can put some error message
QPointer<QTimer> UpdateVideo = new QTimer;
connect(UpdateVideo, SIGNAL(timeout()), this, SLOT(UpdateVideo()));
UpdateVideo->start(10);
}
ご覧のとおり、スロット on_pushButton_2_clicked() は、最初のクリックの後、10ms ごとにタイマーを使用してスロット UpdateVideo() を呼び出します。ビデオを問題なく表示したいのですが、数秒後に qt クリエーターのアプリケーション出力に次のエラーが表示されます。
Qimage: メモリ不足です。ヌル画像を返します。
そして、graphicsView フレームが空白になります。メモリリークの場所を教えてください。