这是我在这里的第一篇文章,我想在stackoverflow上说Hello Everyone:)
好的,欢迎已经过,现在我指出了我遇到的问题。我有一个QGraphicsView小部件,我想在其中显示两个不透明的图像,但我的代码不起作用,我不知道是什么原因:/
QGraphicsScene *scenaWynikowa = new QGraphicsScene(ui->graphicsViewWynik);
ui->graphicsViewWynik->setScene(scenaWynikowa);
ui->graphicsViewWynik->fitInView(scenaWynikowa->itemsBoundingRect(), Qt::KeepAspectRatio);
//wyświetlenie zdjęcia nr 1
QImage obraz1(s1);
obraz1.scaled(QSize(541,541), Qt::IgnoreAspectRatio, Qt::FastTransformation);
update();
resize(541, 541);
QPixmap mapaPikseli1(n1);
QGraphicsPixmapItem *pixmapItem1 = scenaWynikowa->addPixmap(mapaPikseli1);
QGraphicsOpacityEffect poziomPrzezroczystosci1;
poziomPrzezroczystosci1.setOpacity(0.5);
pixmapItem1->setGraphicsEffect(&poziomPrzezroczystosci1);
//wyświetlenie zdjęcia nr 2
QImage obraz2(s2);
obraz2.scaled(QSize(541,541), Qt::IgnoreAspectRatio, Qt::FastTransformation);
update();
resize(541, 541);
QPixmap mapaPikseli2(n2);
QGraphicsPixmapItem *pixmapItem2 = scenaWynikowa->addPixmap(mapaPikseli2);
QGraphicsOpacityEffect poziomPrzezroczystosci2;
poziomPrzezroczystosci2.setOpacity(0.5);
pixmapItem2->setGraphicsEffect(&poziomPrzezroczystosci2);
pixmapItem2->moveBy(0, 0);
ui->graphicsViewWynik->show();
很抱歉没有英文变量的名字,但对我来说更方便。如果你想我可以解释变量具有该名称的内容和原因:) 也许有人在这段代码中发现了一个错误,并向我解释我的代码问题在哪里以及如何修复它?
编辑:这是我的新代码。当我在QGraphicsView上移动pix2的位置时,我可以看到两个图像(pix1下的pix2)并且它工作正常,但是图像应该具有不透明度以产生扩散效果。我该怎么办?
答案 0 :(得分:1)
它不起作用的原因是因为您尝试为QGraphicsScene
使用两个不同的QGraphicsView
。 QGraphicsView
只能有一个场景。
你应该做的是,只创建一个QGraphicsScene
并在那里添加你的像素图。
QGraphicsScene *scene = new QGraphicsScene(this);
ui->graphicsScene->setScene(scene);
QPixmap pix1(n1);
QGraphicsPixmapItem *pixmapItem1 = scene->addPixmap(pix1);
QPixmap pix2(n2);
QGraphicsPixmapItem *pixmapItem2 = scene->addPixmap(pix2);
pixmapItem2->moveBy(0, pix1.height());
此外,您的QGraphicsOpacityEffect
对象仅在您创建的范围内有效。解决此问题的一种方法是使用new
进行分配。
QGraphicsOpacityEffect *opacity1 = new QGraphicsOpacityEffect;
QGraphicsOpacityEffect *opacity2 = new QGraphicsOpacityEffect;
opacity1->setOpacity(0.5);
opacity2->setOpacity(0.2);
pixmapItem1->setGraphicsEffect(opacity1);
pixmapItem2->setGraphicsEffect(opacity2);
答案 1 :(得分:0)
确定。谢谢@thuga的帮助。问题已经解决了。哪里错了?我将Opacity设置为两次另外两个变量,但这是一个巨大的错误。在QGraphicsView中,我们只能声明一次OpacityEffect变量,并将其分配给多个变量 - 就像QGraphicsScene一样。
最新版本的代码(工作正常):
QGraphicsScene *scenaWynikowa = new QGraphicsScene(ui->graphicsViewWynik);
ui->graphicsViewWynik->setScene(scenaWynikowa);
ui->graphicsViewWynik->fitInView(scenaWynikowa->itemsBoundingRect(), Qt::KeepAspectRatio);
QGraphicsOpacityEffect *poziomPrzezroczystosci = new QGraphicsOpacityEffect();
poziomPrzezroczystosci->setOpacity(0.5);
QImage obraz1(s1);
obraz1.scaled(QSize(ui->graphicsViewWynik->width(), ui->graphicsViewWynik->height()), Qt::IgnoreAspectRatio, Qt::FastTransformation);
update();
resize(ui->graphicsViewWynik->width(), ui->graphicsViewWynik->height());
QPixmap mapaPikseli1(n1);
QGraphicsPixmapItem *pixmapItem1 = scenaWynikowa->addPixmap(mapaPikseli1);
QImage obraz2(s2);
obraz2.scaled(QSize(ui->graphicsViewWynik->width(), ui->graphicsViewWynik->height()), Qt::IgnoreAspectRatio, Qt::FastTransformation);
update();
resize(ui->graphicsViewWynik->width(), ui->graphicsViewWynik->height());
QPixmap mapaPikseli2(n2);
QGraphicsPixmapItem *pixmapItem2 = scenaWynikowa->addPixmap(mapaPikseli2);
pixmapItem1->setGraphicsEffect(poziomPrzezroczystosci);
pixmapItem2->setGraphicsEffect(poziomPrzezroczystosci);
pixmapItem2->moveBy(0, 0);
ui->graphicsViewWynik->show();