我正在尝试使用QML源从QML加载一个图像。在main.qml中,我有:
Image {
id: photoFiltering
fillMode: Image.PreserveAspectFit
width: parent.width
height: parent.height/2
anchors.leftMargin: 20
anchors.rightMargin: 20
anchors.bottomMargin: 20
}和
Button{
id: filtersButtons
text: "Filter"
anchors.top: photoFiltering.bottom
anchors.horizontalCenter: photoFiltering.horizontalCenter
onClicked: ()=>{
filterController.setFilterType(filterController.Original);
var filteredImage = filterController.filterImage(photoFiltering.source);
}
}因此,在我的C++代码中,我将尝试执行以下操作:
QImage FilterController::filterImage(QString imageSource)
{
QImage image;
bool loaded = image.load(imageSource);
cout << "image laoded " << loaded << endl;
...
return image;
}问题是,我不能简单地加载这样的图像来获得对象QImage。我该怎么做才能得到那张照片?
发布于 2022-11-05 01:41:04
这是从QImage中检索QUrl的一种方法:
使用QNetworkReply::readAll()将QNetworkAccessManager
下面是一个用于执行上述操作的ImageUtil助手类:
//ImageUtil.h
#ifndef __ImageUtil__
#define __ImageUtil__
#include <QObject>
#include <QImage>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class ImageUtil : public QObject
{
Q_OBJECT
public:
ImageUtil(QObject* parent = nullptr) :
QObject(parent),
m_Manager(new QNetworkAccessManager(this))
{
connect(m_Manager, &QNetworkAccessManager::finished, this, &ImageUtil::onFinished);
}
const QImage& image() const { return m_Image; }
Q_INVOKABLE void loadFromUrl(const QUrl& url)
{
QNetworkRequest request(url);
m_Manager->get(request);
}
signals:
void loaded();
protected slots:
void onFinished(QNetworkReply* reply)
{
QByteArray data = reply->readAll();
m_Image.loadFromData(data);
emit loaded();
}
protected:
QImage m_Image;
QNetworkAccessManager* m_Manager;
};
#endif这是对全班的一次测试:
void test()
{
ImageUtil* imageUtil = new ImageUtil();
imageUtil->loadFromUrl(QUrl("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"));
imageUtil->connect(imageUtil, &ImageUtil::loaded,
[=]() {
QImage image = imageUtil->image();
qDebug() << image.width() << image.height(); // 272 92
});
}请将上述代码作为指南,不要期望它在生产环境中站稳脚跟。要想做好一份正确的工作,你真的需要明白:
用于实例化和清理类的
https://stackoverflow.com/questions/74320020
复制相似问题