501*_*ted 6 qt absolute-path qml
在Windows下我无法使用QML中的绝对文件路径加载图像.每次我收到以下错误:
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
}
Run Code Online (Sandbox Code Playgroud)
我及时测试了以下命令,如果我点击图像:
onClicked:{
console.log(path)
}
Run Code Online (Sandbox Code Playgroud)
比我得到当前的路径:D:/folder/image1.jpg
是否有针对Windows的解决方案?
问候
Fab*_*ien 13
"file // d/folder/image1.jpg"不是有效的URL.它应该是"file:/// d:/folder/image1.jpg".
好吧,我找到了解决方案。我实现了一个QDeclarativeImageProvider在 C++ 中处理图像路径并返回 PixelMap 的程序。如果你感兴趣:
#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
Run Code Online (Sandbox Code Playgroud)
#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;
}
Run Code Online (Sandbox Code Playgroud)
view->engine()->addImageProvider(QString("extern"), imageProvider);
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)