Qt Graphics View, показать изображение!, Виджет - PullRequest
10 голосов
/ 21 августа 2011

Вот мой код:

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

Не работает.

Как это исправить?

Ответы [ 2 ]

18 голосов
/ 21 августа 2011

Вам нужно создать все ваши объекты в куче, в противном случае они будут удалены, когда они выйдут из области видимости:

QGraphicsScene* scene = new QGraphicsScene();
QGraphicsView* view = new QGraphicsView(scene);
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene->addItem(item);
view->show();

Ваш второй вопрос может быть связан с scene, назначенным ui->graphicsView, но он сразу же удаляется, поэтому снова создайте все ваши объекты в куче.

6 голосов
/ 27 июня 2012

Если вам не нужно придерживаться QGraphicsView, то одна из возможностей - использовать вместо этого QLabel.Мне не удалось решить это для QGraphicsView ...

QString filename = "X:/my_image";
QImage image(filename);
ui->label->setPixmap(QPixmap::fromImage(image));
...