在QT5中使用Image Provider在两个不同的图像控件中显示两个不同的图像

问题描述 投票:0回答:1

我有一个项目,它显示 IP 摄像机单击的图像,它是显示图像 unsing image Provider 类,在图像控制中,现在我想要的是单击 2 个图像并在两个不同的图像控制中显示这两个图像,我是 qt 和 i 的新手尝试了很多方法但没有成功我当前的代码如下

用于注册图像提供商

 engine.addImageProvider(QLatin1String("capturedImage"), capturedImageProvider);

Image Provider 的写法如下 #包括 #include“imageProvider.h”

ImageProvider::ImageProvider(QObject *parent) : 
QQuickImageProvider(QQmlImageProviderBase::Image)
{

}

QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize& 
requestedSize)
{
    QImageReader reader("output.png");
    //QImageReader reader(id);
    QImage newImage = reader.read();
    return newImage;
}

在qml中我写的如下

 onUpdateCapturedImage: {
        fmImage.source = "image://capturedImage?id=" + Math.random()
        
        fmImage2.source = "image://capturedImage?id=" + Math.random()
        
        btCapture.enabled = true
        pin.visible = false
        btCancel.visible = false
        btCapture.visible =true
        lbFileName.visible = false
        tmUpdateProgress.stop()
        if(status) {
            lbFileName.text = fileName;
        }

这里 fmImage 和 fmImage2 是图像控件,当前两个控件都显示相同的图像,我希望它们显示不同的图像,我该怎么做,请有人用小例子解释我

qt qml qt5
1个回答
0
投票

指定显示哪个图像的方法是在 ID 字段中。目前,您将

Math.random()
作为 ID 传递,然后在 requestImage 函数中忽略它。但如果您更改它以使 ID 有意义,您可以决定返回哪个图像。

onUpdateCapturedImage: {
    fmImage.source = "image://capturedImage?id=" + firstId
    fmImage2.source = "image://capturedImage?id=" + secondId
}
QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize& 
requestedSize)
{
    QImageReader reader;

    if (id == firstId)
    {
        reader.setFileName("output1.png");
    }
    else if (id == secondId)
    {
        reader.setFileName("output2.png");
    }
    else
    {
        // Unknown image
    }

    QImage newImage = reader.read();
    return newImage;
}
© www.soinside.com 2019 - 2024. All rights reserved.