Oto mój kod:Wyświetl grafikę Qt, pokaż obraz! Widget
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();
}
}
chcę wyświetlić obraz z pliku, kod działa dobrze, ale disappiars obraz bardzo szybko.
Jak mogę wstrzymać obraz ekranu?
Jak mogę załadować obraz w widżecie "graphicsView"?
Mój kod:
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();
}
}
To nie działa.
Jak to naprawić?
A jak uniknąć wycieku pamięci? : =) Muszę zwolnić pamięć w prawo ¿? :) –
Tak, musisz wyczyścić się z usunięciem. Sugerowałbym, aby zadeklarować swoją QGraphicsScene (i QGraphicsPixmapItem, jeśli nie zostanie ona skopiowana podczas additem) jako zmienną wskaźnika klasy. I wtedy sugerowałbym użycie jakiegoś inteligentnego wskaźnika, gdy zadeklarujesz zmienną, np. QSharedPointer: QSharedPointer ptr_scene; this-> ptr_scene = QSharedPointer (new QGraphicsScene()) Następnie pamięć jest zarządzana po zamknięciu MainWindow. –
thomas