如何从 C++ 端多次将 QImage 对象设置为 QML 的 Image 元素?
How to set a QImage object to QML's Image element from C++ side multiple times?
我的 Qt 应用程序中的 C++ 代码端有一个 QImage 对象。
Image {
id: my_image
source: ""
}
我有 QML Connections 元素,我正在其中发送 QImage
Connections {
target: qimage_supplier
onNewQImage: {
recalled_media_image.source = new_qimage_supplied
}
}
问题:
是否可以将 QImage
对象设置为 Image
QML 项的源?
执行上述 new_qimage_supplied
实际上是从 C++ 端发送的 QImage
的方式,它会抱怨以下内容:
Error: Cannot assign QImage to QUrl
如何将 QImage
对象设置为 Image
QML 元素?
这是一个简单粗暴的示例(不适用于复制和粘贴!)
// 在 main.cpp 中(缺少导入)
class MyImageProvider: public QQuickImageProvider
{
QImage m_image;
public:
MyImageProvider(QImage img)
: QQuickImageProvider(QQuickImageProvider::Image)
, m_image(img)
{}
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override {
qDebug() << m_image;
return m_image;
}
};
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.addImageProvider("myimg", new MyImageProvider(QImage("C:/.../image.png")));
engine.load(QUrl(QStringLiteral("main.qml")));
return app.exec();
}
// 在 main.qml
ApplicationWindow {
id: rootWin
width: 800; height: 600; visible: true
Image {
source: "image://myimg/1"
}
}
来源是:
image://registeredNameOfImageProvider/potentialId
我的 Qt 应用程序中的 C++ 代码端有一个 QImage 对象。
Image {
id: my_image
source: ""
}
我有 QML Connections 元素,我正在其中发送 QImage
Connections {
target: qimage_supplier
onNewQImage: {
recalled_media_image.source = new_qimage_supplied
}
}
问题:
是否可以将 QImage
对象设置为 Image
QML 项的源?
执行上述 new_qimage_supplied
实际上是从 C++ 端发送的 QImage
的方式,它会抱怨以下内容:
Error: Cannot assign QImage to QUrl
如何将 QImage
对象设置为 Image
QML 元素?
这是一个简单粗暴的示例(不适用于复制和粘贴!)
// 在 main.cpp 中(缺少导入)
class MyImageProvider: public QQuickImageProvider
{
QImage m_image;
public:
MyImageProvider(QImage img)
: QQuickImageProvider(QQuickImageProvider::Image)
, m_image(img)
{}
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override {
qDebug() << m_image;
return m_image;
}
};
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.addImageProvider("myimg", new MyImageProvider(QImage("C:/.../image.png")));
engine.load(QUrl(QStringLiteral("main.qml")));
return app.exec();
}
// 在 main.qml
ApplicationWindow {
id: rootWin
width: 800; height: 600; visible: true
Image {
source: "image://myimg/1"
}
}
来源是:
image://registeredNameOfImageProvider/potentialId