qml显示网络发来的图片数据

-----------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 @@@@@@@@")
                }
            }

### 回答1: QML是一种用于构建用户界面的声明性语言,它可以很方便地显示图片并实现图片的缩放功能。 要显示图片,我们可以使用QML中的Image类型。首先,我们需要导入Qt Quick模块并创建一个QML窗口,然后在窗口中添加一个Image元素。通过设置source属性,我们可以将所需的图片文件路径赋值给它。例如,若希望显示名为"image.png"的图片,可以将其路径赋值给source属性,就像这样: Image { source: "image.png" } 此时,图片将根据其原始大小自动在窗口中进行显示。如果需要对图片进行缩放,可以设置Image的width和height属性来自定义图片的大小。例如: Image { source: "image.png" width: 200 height: 200 } 上述代码将将图片的宽度和高度设置为200,从而实现了对图片的缩放。 除了使用width和height属性,也可以使用scale属性来缩放图片。scale是一个浮点数值属性,可以设置为小于1的值实现缩小,大于1的值实现放大。例如,若希望将图片缩小到原始尺寸的50%大小,可以设置scale属性为0.5,如下所示: Image { source: "image.png" scale: 0.5 } 这样,图片将会以原始尺寸的50%进行显示。 总结一下,通过使用QML的Image元素,我们可以很方便地显示图片并实现图片的缩放功能,通过设置width、height或scale属性来自定义图片的大小。 ### 回答2: QML是一种用于创建用户界面的声明式编程语言,我们可以使用它显示图片和缩放图片。 要在QML显示图片,我们可以使用`Image`元素。首先,我们需要将图片文件放置在项目目录中,然后可以使用`source`属性将其指定为Image元素的来源。例如: ``` Image { source: "images/my_image.jpg" } ``` 上述代码将在界面上显示名为"my_image.jpg"的图片。我们可以根据需要调整Image元素的位置、大小等属性来定制显示效果。 接下来,我们可以通过在Image元素中使用`transform`属性来缩放图片。可以使用`Scale`元素来实现缩放,通过设置`xScale`和`yScale`来指定X和Y方向上的缩放比例。例如: ``` Image { source: "images/my_image.jpg" transform: Scale { xScale: 0.5; yScale: 0.5 } } ``` 上述代码将缩小图片的大小为原来的一半。我们可以根据需要调整缩放比例,使图片按比例放大或缩小。 除了缩放,我们还可以通过设置Image元素的其他属性来控制图片的行为,例如`fillMode`属性可以指定图片如何填充Image元素的矩形区域。 总之,通过使用Image元素和transform属性,我们可以在QML显示图片并对其进行缩放操作,实现我们的界面设计需求。 ### 回答3: QML是一种基于Qt框架的可视化编程语言,用于创建跨平台的用户界面。在QML中,我们可以使用Image组件来显示图片,并使用Transform组件来实现图片的缩放。 要显示图片,我们可以使用Image组件,并将source属性设置为图片的路径。例如,如果图片位于当前目录下的image.png文件中,我们可以这样写: Image { source: "image.png" } 上述代码将在界面上显示名为image.png的图片。 要实现图片的缩放,我们可以使用Transform组件,并将其作为Image组件的一个子项。Transform组件有多种类型,其中一种是Scale类型,用于实现缩放效果。 例如,我们可以将图片放大两倍: Image { source: "image.png" Transform { scale: 2 } } 上述代码将在界面上显示放大两倍的image.png图片。 如果我们希望通过用户交互来实现缩放,可以使用MouseArea组件来捕捉鼠标事件,并通过更改Transform组件的scale属性来实现缩放效果。 例如,我们可以通过鼠标滚轮来实现图片的缩放: Image { source: "image.png" Transform { scale: 1 } MouseArea { anchors.fill: parent onWheel: { var delta = wheel.angleDelta.y / 120 // 获取滚轮滚动距离 transform.scale *= Math.pow(1.1, delta) // 根据滚动距离计算缩放比例 } } } 上述代码将在界面上显示image.png图片,并允许通过滚动鼠标滚轮来实现缩放效果。每次滚轮滚动,图片将按比例进行放大或缩小。 总结起来,QML提供了Image组件用于显示图片,并通过Transform组件实现图片的缩放。我们可以直接设置scale属性来缩放图片,也可以通过用户交互来实现缩放效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值