-----------screenimageprovider.h----------------------
#ifndef SCREENIMAGEPROVIDER
#define SCREENIMAGEPROVIDER#include <QQuickImageProvider>
#include <QImage>
#include <QSize>
#include <QColor>
class ScreenImageProvider : public QQuickImageProvider
{
public:
ScreenImageProvider()
: QQuickImageProvider(QQuickImageProvider::Image)
{
}
QImage requestImage(const QString &, QSize *, const QSize &)
{
return this->img;
}
QImage img;
};
#endif // SCREENIMAGEPROVIDER
------------changepicsmallturn.h------------
#ifndef CHANGEPICSMALL
#define CHANGEPICSMALL
#include <QThread>
#include "screenimageprovider.h"
class ChangePicsSmallTurn : public QThread {
Q_OBJECT
public :
virtual void run(QByteArray &data, ScreenImageProvider *imgProvider);
~ChangePicsSmallTurn()
{
}
signals:
void refeshImgSmallTurn();// tell ServerStream to emit a callQmlRefeshImg
};
#endif // CHANGEPICSMALL
--------------------------------------main.cpp-------------------------------
int server_main(int argc, char *argv[])
{
QApplication app(argc, argv);
// QCommandLineParser parser;
// QCommandLineOption serialOption(QStringList() << "s" << "serial port device name", "specify serial port device", "serial", "ttyS2");
// parser.addOption(serialOption);
// parser.process(app);
// QString serial = "ttymxc1";
// if (parser.isSet(serialOption))
// serial = parser.value(serialOption);
MFontName fontName;
ServerStream *stream = new ServerStream;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("clientSmallTurn", stream);
engine.addImageProvider(QLatin1String("screenSmallTurn"), stream->imgProviderSimpleTurn);
return app.exec();
// return startup_end(app.exec);
}
-----------------------------ServerStream.h--------------------------------
private:
QByteArray imageDataSmallPic;//storage data for small pics
ChangePicsSmallTurn *chgSmallTurn;//转向
public:
ScreenImageProvider *imgProviderSimpleTurn;
signals:
void callQmlRefeshImg();//通知QML刷新显示界面
void callQmlRefeshImgSmallTurn();
public slots:
void emitRefreshSmallTurn();//small pics
------------------------------ServerStream.cpp-------------------------------------
ServerStream::ServerStream(QWidget *qw) : QWidget(qw)
{
chgSmallTurn = new ChangePicsSmallTurn();
connect(chgSmallTurn, SIGNAL(refeshImgSmallTurn()), this, SLOT(emitRefreshSmallTurn()));
chgSmallTurn->wait();
}
解析网络发来的数据里
chgSmallTurn->run(imageDataSmallPic, imgProviderSimpleTurn);
void ChangePicsSmallTurn::run(QByteArray &data, ScreenImageProvider *imgProvider)
{
imgProvider->img.QImage::loadFromData(data);
emit refeshImgSmallTurn();
}
void ServerStream::emitRefreshSmallTurn()
{
emit callQmlRefeshImgSmallTurn();
}
------------------------------qml-------------------------------------
Image {
id:screenImg
cache: false // important!
x:root.modles === 2 ? 406 :0
y:root.modles===1?65:0
width: root.modles===1?910:mapItem.width
height: root.modles===1?590:mapItem.height
Item {
id: zhe
visible: root.modles===2 && qstream.strTurn != " "
x:-406
Image {
id: zheLeft
x: 336
y: 69
source: "qrc:/image/image/zheLeft.png"
}
Image {
id: zheRight
x: 1486
y: 69
source: "qrc:/image/image/zheRight.png"
}
}
}
Connections {
target:client // the target in ServerMain.cpp : engine.rootContext()->setContextProperty("client", stream);
onCallQmlRefeshImg: { // update picture by the singal callQmlRefeshImg of class client
screenImg.source = ""
screenImg.source = "image://screen" // 'image:' : the fixed prefix
// 'screen' : find in ServerMain.cpp
// engine.addImageProvider(QLatin1String("screen"), stream->imgProvider);
indicatorBg.visible = true
if(root.modles === 0)
{
root.modles=1;
// once=false;
}
if(twoFlag<2)
{
twoFlag++
}
}
}
Image {
id: screenImgSmallTurn
cache: false
x:root.modles===1?80:580
y:root.modles===1 ? 80 : 110
// width:90
// height: 90
width: /*800*/mapItem.width/13
height: /*480*//*600*/mapItem.height/8
}
Connections {
target:clientSmallTurn
onCallQmlRefeshImgSmallTurn: {
screenImgSmallTurn.source = ""
screenImgSmallTurn.source = "image://screenSmallTurn"
console.debug("@@@@@@@@ turn @@@@@@@@")
}
}