日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Qt C++发送图片到QML显示

發布時間:2025/1/21 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt C++发送图片到QML显示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

開發Qt應用時,想把QImage發送到QML端通過Image組件顯示出來,這種場景主要用在例如在C++端調用android系統接口截圖然后發送到QML端顯示,或者C++端QWidget截圖然后讓QML界面中顯示。要想實現該功能,需要用到一個重要的類QQuickImageProvider,這是專門從C++端提供圖片到QML顯示的。

正文

先來看看Qt的示例

首先定義一個類并繼承于QQuickImageProvider,然后重新實現接口requestPixmap,如果需要傳入QImage圖片的話就重寫requestImage接口,原理是一樣的,詳情查看Qt官方文檔。

class ColorImageProvider : public QQuickImageProvider{public:ColorImageProvider(): QQuickImageProvider(QQuickImageProvider::Pixmap){}QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize){int width = 100;int height = 50;if (size)*size = QSize(width, height);QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width,requestedSize.height() > 0 ? requestedSize.height() : height);pixmap.fill(QColor(id).rgba());return pixmap;}};

然后在main函數中添加圖片入口,使用addImageProvider函數

int main(int argc, char *argv[]){...QQuickView view;QQmlEngine *engine = view.engine();engine->addImageProvider(QLatin1String("colors"), new ColorPixmapProvider);...}

再在QML端界面上顯示

Column {Image { source: "image://colors/yellow" }Image { source: "image://colors/red" }}

這里的colors就是main函數中定義的圖片文件夾名稱,yellow和red相當于id,也就是在requestPixmap中的第一個參數可以拿到這個值。編譯運行后,得到如下示意圖:

動態刷新圖片

以上是顯示一張靜態圖片,如果是要動態的刷新QML的圖片要怎么辦呢?接著看

class ImageProvider : public QQuickImageProvider { public:ImageProvider();QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize);QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize);QImage img;}; #include "imageprovider.h"ImageProvider::ImageProvider(): QQuickImageProvider(QQuickImageProvider::Image) { }QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize) {return this->img; }QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) {return QPixmap::fromImage(this->img); }

然后再定義一個類

class ShowImage : public QObject {Q_OBJECT public:explicit ShowImage(QObject *parent = 0);ImageProvider *m_pImgProvider; public slots:void setImage(QImage image); signals:void callQmlRefeshImg(); }; ShowImage::ShowImage(QObject *parent) :QObject(parent) {m_pImgProvider = new ImageProvider(); } void ShowImage::setImage(QImage image) {m_pImgProvider->img = image;emit callQmlRefeshImg(); }

然后在main函數中注冊

ShowImage *CodeImage = new ShowImage(this);engine.rootContext()->setContextProperty("CodeImage",CodeImage);engine.addImageProvider(QLatin1String("CodeImg"), CodeImage->m_pImgProvider);

回到QML中調用

Image{id:imganchors.fill: parent}Connections{target: CodeImageonCallQmlRefeshImg:{img.source = ""img.source = "image://CodeImg"}}

注意,這里刷新圖片的時候必須先設置為空img.source = “”,否則無法刷新。另外,我在Mac 上用 Qt5.11版本測試的時候,發現圖片依然不能刷新,然后在 Image 屬性加上一句:cache:false 就搞定了,不顯示的原因是 Image 自動做了緩存,把緩存去掉就行了。
這樣一來,C++端設置新圖片后會發送信號,在QML端連接信號然后去圖片目錄下去取出來刷新當前控件。原理很簡單,不再贅述。

添加了演示代碼,在這里

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Qt C++发送图片到QML显示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一区第一页 | 亚洲国产精品一区 | 日韩精品在线一区二区 | 三级在线免费 | 日本视频在线免费观看 | 欧美变态口味重另类 | 奇米精品一区二区三区在线观看一 | 免费观看一区二区三区视频 | 午夜激情av | 日韩欧美视频在线 | 国产一区二区免费视频 | 欧美一级黄色片网站 | 黄色动漫在线免费观看 | 国产黄片毛片 | 无码黑人精品一区二区 | 亚洲一区 中文字幕 | 美女爱爱爱 | 一区二区三区www | 亚洲の无码国产の无码步美 | 久久久一区二区三区四区 | 日操夜操天天操 | 极品美女被c | 日韩国产二区 | a√在线视频 | 成人在线网址 | 亚洲av少妇一区二区在线观看 | 欧美激情一区二区三区免费观看 | 大陆农村乡下av | 国产113页 | 人人妻人人爽人人澡人人精品 | 小sao货大ji巴cao死你 | 亚洲同性gay激情无套 | 91热在线| 长腿校花无力呻吟娇喘的视频 | 爱情岛论坛亚洲品质自拍 | 干日本少妇首页 | 免费草逼网站 | 精品69| 国产精品福利一区二区三区 | 一二三区在线观看 | 欧美一区二区视频 | 全部免费毛片在线播放 | 久久伊人在 | 久久久久久91 | 久久一区国产 | 国产91在线观看 | 风流少妇一区二区三区91 | 91一区二区在线观看 | 黄色美女一级片 | 成年人一级片 | 亚洲天堂2018av | 人善交videos欧美3d动漫 | 私密spa按摩按到高潮 | 久久艹精品视频 | 国产一级片视频 | 自拍偷拍2019 | 99久久精品久久久久久清纯 | 久久久久久久久久久国产 | 国产精品伦一区 | 五月天婷婷激情 | 西西人体44www大胆无码 | 亚洲三级国产 | wwwyoujizz日本 | 国产一区麻豆 | 2019最新中文字幕 | 国产精品福利小视频 | 不卡中文字幕 | 精品人伦一区二区三区蜜桃免费 | 精品99久久久久成人网站免费 | 免费av在线播放 | 污污内射在线观看一区二区少妇 | 在线观看 一区 | 自拍一区在线 | 91狠狠操 | 成人黄色在线视频 | 免费国产一区二区三区 | 国产精品成人网 | 日本三级aaa | 黄色在线网站 | 国产伦精品一区二区三区免费迷 | 天天操免费视频 | 人妻中文字幕一区二区三区 | 精品无码久久久久久久久 | 免费超碰在线观看 | 国产情侣一区 | 黄色av免费在线观看 | ts人妖在线观看 | 日本美女一区二区 | 日韩精品在线一区二区三区 | 精品国产人妻一区二区三区 | 国内精品国产三级国产aⅴ久 | 黄色av网址在线观看 | 貂蝉被到爽流白浆在线观看 | 日本55丰满熟妇厨房伦 | 成年人在线视频网站 | 初尝人妻少妇中文字幕 | 欧美乱妇日本无乱码特黄大片 | 一对一色视频聊天a | 日韩成人在线观看视频 |