Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt “你是如何创造酷”的;“镜子”;图形GUI中显示的项目的效果?_Qt_User Interface_Graphics_2d - Fatal编程技术网

Qt “你是如何创造酷”的;“镜子”;图形GUI中显示的项目的效果?

Qt “你是如何创造酷”的;“镜子”;图形GUI中显示的项目的效果?,qt,user-interface,graphics,2d,Qt,User Interface,Graphics,2d,我有一个qgraphicscene,我在场景中添加了几个QGraphicsItem。添加到场景中的所有项目都是QGraphicsPixmapItem 我希望输出显示的场景对添加到场景中的每个项目都具有“镜像”视觉效果。我想让“镜像”视觉效果在显示相册时看起来有点像iTunes镜像: (注:上图来自“.CoverFlow”,我认为是他们实现了iTunes相册显示“镜像”视觉效果。) 请注意,此场景中的每个项目下面都有一面镜子 如何为每个项目创建“镜像”视觉效果(见屏幕截图)?我想我会这样做。根据

我有一个qgraphicscene,我在场景中添加了几个QGraphicsItem。添加到场景中的所有项目都是QGraphicsPixmapItem

我希望输出显示的场景对添加到场景中的每个项目都具有“镜像”视觉效果。我想让“镜像”视觉效果在显示相册时看起来有点像iTunes镜像:

(注:上图来自“.CoverFlow”,我认为是他们实现了iTunes相册显示“镜像”视觉效果。)

请注意,此场景中的每个项目下面都有一面镜子


如何为每个项目创建“镜像”视觉效果(见屏幕截图)?

我想我会这样做。根据评论,我想这对你也有好处

我只需要使用QPainter从原始图像创建反射镜像图像,然后将两者合并(再次使用QPainter)。此结果图像是使用QGraphicsPixmapItem显示的图像。在下面的代码中,我创建了映像的反射镜像版本。然后需要做的就是调整参数并合并

#include <QApplication>
#include <QLabel>
#include <QPixmap>
#include <QPainter>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // Just to show the original image.
    QLabel label;
    QImage original(<place_an_image_path_here>);
    label.setPixmap(QPixmap::fromImage(original));
    label.show();

    // Create the gradient that will be placed over the image.
    QPoint start(0, 0);
    QPoint end(0, original.height());
    QLinearGradient gradient(start, end);
    gradient.setColorAt(0.0, Qt::white);
    gradient.setColorAt(0.5, Qt::black);

    // Create the mask to be used on the mirrored image.
    QImage mask(original.size(), original.format());
    QPainter painter(&mask);
    // You may want to add additional opacity according
    // to the sample image shown.
    painter.setOpacity(0.8);
    painter.fillRect(original.rect(), gradient);
    painter.end();

    // Create the mirrored reflection.
    QImage reflection = original.mirrored();
    reflection.setAlphaChannel(mask);

    // Just to show the result.
    QLabel labelReflection;
    labelReflection.setPixmap(QPixmap::fromImage(reflection));
    labelReflection.show();

    return a.exec();
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
//只是为了显示原始图像。
QLabel标签;
QImage原件();
label.setPixmap(QPixmap::fromImage(原始));
label.show();
//创建将放置在图像上的渐变。
QPoint启动(0,0);
QPoint end(0,原始.height());
QlineArgent梯度(起点、终点);
梯度。setColorAt(0.0,Qt::白色);
梯度。setColorAt(0.5,Qt::黑色);
//创建要在镜像图像上使用的遮罩。
QImage掩码(original.size(),original.format());
Q油漆工和面罩;
//您可能需要根据需要添加额外的不透明度
//到所示的示例图像。
不透明度(0.8);
painter.fillRect(original.rect(),gradient);
结束();
//创建镜像反射。
QImage reflection=original.mirrored();
反射通道(掩模);
//只是为了显示结果。
QLabel标签反射;
setPixmap(QPixmap::fromImage(reflection));
labelReflection.show();
返回a.exec();
}
您可以将结果图像(两者合并的结果)加载到QGraphicsPixmapItem中,然后继续应用所需的所有转换

编辑:我忘记了您可能还需要设置一个额外的不透明度,就像提供的图像一样。我没有尝试,但是使用QPixmaps也可以做到同样的事情。这将提高性能,甚至允许根据平台和您使用的喷漆引擎加速喷漆

EDIT2:根据要求,这是我的测试代码的输出:
(我希望此图像不受版权保护或类似保护,我尝试检查,但没有编写任何内容)

我的第一个想法是:创建一个新类,从QGraphicsSiteMgroup继承。构造函数将有一个pixmap作为输入。创建两个QGraphicsPixMapItem。将它们添加到QGraphicsSiteMgroup。将第二个图形项安排为“镜像”(取决于实现…)。如果你发布了某种屏幕截图,我认为你的帖子会给人留下更深刻的印象。(在此期间,我将着手将原始/反射合并到一个图形站点中。)我注意到您的回答是“我希望此图像不受版权保护”。如果你担心版权问题,你可以打开某种图像编辑器,创建自己的图像(例如:使用文本工具在图像上光栅显示一些文本“helloworld”)。