2013-04-07 54 views
4

在windows下我无法在QML中加载具有绝对文件路径的图像。 每次我得到以下错误:在QML/QT中设置绝对图像路径时出现错误(在Windows下)

QML Image: Cannot open: "file//d/folder/image1.jpg"

Ubuntu下它可以完美运行。

的图像由该代码集动态:

Image { 
     id: img 
     x: 0 
     y: 25 
     width: 227 
     height: 230 
     anchors.horizontalCenter: parent.horizontalCenter 
     source: "file://"+path 
     fillMode: Image.PreserveAspectFit 
    } 

在时刻i测试了下面的命令,如果我在图像上点击了:

onClicked:{ 

       console.log(path) 
    } 

比我得到的电流路径:D:/folder/image1.jpg 是否有解决Windows问题的方法?

问候

回答

3

好的,我找到了解决方案。 我实现了一个QDeclarativeImageProvider,它处理C++中的图像路径并返回一个PixelMap。 如果你有兴趣:

imageprovider.h

#ifndef IMAGEPROVIDER_H 
#define IMAGEPROVIDER_H 
#include <QDeclarativeImageProvider> 
class ImageProvider : public QObject, public QDeclarativeImageProvider 
{ 
    Q_OBJECT 
    public: 

    ImageProvider(QDeclarativeImageProvider::ImageType type); 
    ~ImageProvider(); 
    QImage requestImage(const QString& id, QSize* size, const QSize& requestedSize); 
    QPixmap requestPixmap(const QString& id, QSize* size, const QSize& requestedSize); 
}; 
#endif // IMAGEPROVIDER_H 

imageprovider.cpp

#include "imageprovider.h" 
#include <QFile> 
#include <QImage> 
#include <QPixmap> 
#include <QDebug> 


ImageProvider::ImageProvider(QDeclarativeImageProvider::ImageType type) : 
QDeclarativeImageProvider(type){} 

ImageProvider::~ImageProvider(){} 

QImage ImageProvider::requestImage(const QString& id, QSize* size, const QSize& requestedSize) 
{ 
    QImage image(id); 
    QImage result; 

    if (requestedSize.isValid()) { 
     result = image.scaled(requestedSize, Qt::KeepAspectRatio); 
    } else { 
     result = image; 
    } 
    *size = result.size(); 
    return result; 
} 

QPixmap ImageProvider::requestPixmap(const QString& id, QSize* size, const QSize& requestedSize) 
{ 
    QPixmap image(id); 
    QPixmap result; 

    if (requestedSize.isValid()) { 
     result = image.scaled(requestedSize, Qt::KeepAspectRatio); 
    } else { 
    result = image; 
    } 
    *size = result.size(); 
    return result; 
} 

登记mainwindow.cpp

view->engine()->addImageProvider(QString("extern"), imageProvider); 

片段QML文件的

Image { 
     id: img 
     x: 0 
     y: 25 
     width: 227 
     height: 230 
     anchors.horizontalCenter: parent.horizontalCenter 
     source: "image://extern/"+path 
     //doesn't find absolute path in windows source: "file://"+path 
     fillMode: Image.PreserveAspectFit 
    } 
10

“file // d/folder/image1.jpg”不是有效的URL。它应该是“file:/// d:/folder/image1.jpg”。

+1

谢谢!帮助我比接受的答案更多;-) – 2015-03-28 14:02:20

相关问题