這可以通過使用QQuickPaintedItem來完成。
在C++的Qt部分
你需要有它繼承QQuickPaintedItem類:
//imagewriter.h
class imagewriter : public QQuickPaintedItem
{
Q_OBJECT
public:
imagewriter(QQuickItem *parent = 0);
void paint(QPainter *painter);
//the paint method is already implemented in QQuickPaintedItem
//you just override it
QImage image; //your image
};
// imagewriter.cpp
imagewriter::imagewriter(QQuickItem *parent): QQuickPaintedItem(parent)
{
}
void imagewriter::paint(QPainter *painter)
{
painter->drawImage(QPoint(0,0),this->image);
//this will simply draw the image in your qml UI !
}
現在您只需註冊該對象以便能夠在您的qml文件中使用它:
//主的.cpp:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<imagewriter>("mr.jb",1,0,"my_video_image");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
// main.qml:
import mr.jb 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
my_video_image {
id : my_img_strm1
anchors.centerin : parent
}
}
的my_video_image對象應該能夠顯示您的QImage,所有你需要的要做的就是不斷更新該圖像到你從ROS流獲得的最後一幅圖像,並且每次你調用預定義的update();方法,以便自動重新觸發paint方法,該方法可響應在qml世界中繪製圖像。 我想你沒有T1部分的問題。
在T2(C++類)中接收和構建圖像可以通過多種方式完成(例如QUdp)。
最後一部分(T3)在上面的代碼中描述。
請告訴我,如果你仍然無法做到這一點 – Kornava