Dav*_*ani 10 graphics qt image view qgraphicsview
这是我的代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
}
我想从文件显示图像,代码工作正常,但图像的速度非常快.
如何暂停图像屏幕?
如何在"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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的.
如何解决这个问题?
lau*_*ent 19
您需要在堆上创建所有对象,否则当它们超出范围时会被删除:
QGraphicsScene* scene = new QGraphicsScene();
QGraphicsView* view = new QGraphicsView(scene);
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene->addItem(item);
view->show();
Run Code Online (Sandbox Code Playgroud)
你的第二个问题可能是相关的 - scene
被分配给ui->graphicsView
但是它会立即删除,所以再次在堆上创建所有对象.
小智 6
如果您不必坚持使用QGraphicsView,则可以使用QLabel.我没有设法为QGraphicsView解决它...
QString filename = "X:/my_image";
QImage image(filename);
ui->label->setPixmap(QPixmap::fromImage(image));
Run Code Online (Sandbox Code Playgroud)