void MainWindow::on_actionOpen_Image_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this,"Open Image File",QDir::currentPath());
if(!fileName.isEmpty())
{
QImage image(fileName);
if(image.isNull())
{
QMessageBox::information(this,"Image Viewer","Error Displaying image");
return;
}
QGraphicsScene scene;
QGraphicsView view(&scene);
QGraphicsPixmapItem item(QPixmap::fromImage(image));
scene.addItem(&item);
view.show();
}
파일에서 이미지를 표시하고 코드는 잘 동작하지만 이미지는 매우 빨리 사라집니다.
어떻게 이미지 화면을 일시 중지 할 수 있습니까?
그리고 "graphicsView"위젯에 이미지를 어떻게로드 할 수 있습니까?
내 코드 :
void MainWindow::on_actionOpen_Image_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this,"Open Image File",QDir::currentPath());
if(!fileName.isEmpty())
{
QImage image(fileName);
if(image.isNull())
{
QMessageBox::information(this,"Image Viewer","Error Displaying image");
return;
}
QGraphicsScene scene;
QGraphicsPixmapItem item(QPixmap::fromImage(image));
scene.addItem(&item);
ui->graphicsView->setScene(&scene);
ui->graphicsView->show();
}
}
작동하지 않습니다.
문제를 해결하는 방법?
메모리 누수가 발생하지 않도록하려면 어떻게해야합니까? : =) 나는 메모리를 풀어야 만한다. :) –
예. 삭제로 직접 정리해야합니다. 클래스 포인터 변수로 QGraphicsScene (및 QGraphicsPixmapItem을 additem 동안 복사하지 않는다면)을 선언하는 것이 좋습니다. 그런 다음 변수를 선언 할 때 스마트 포인터를 사용하는 것이 좋습니다. QSharedPointer : <클래스 헤더에> QSharedPointer ptr_scene; <원본 파일> this-> ptr_scene = QSharedPointer (신규 QGraphicsScene()) MainWindow를 닫을 때 그런 메모리 관리된다. –
thomas