2015-06-05 6 views
6

अगर मैं एकQByteArray QML में परिवर्तित हो जाता है?

signal: 
    void foo(QByteArray data); 

और QML में मैं इसे संभाल:

onFoo: { 
    console.log(data.toString()); 
} 

QML में डेटा के प्रकार क्या है? इसमें क्या तरीके हैं? यह जावास्क्रिप्ट स्ट्रिंग प्रतीत नहीं होता है - इसमें .length भी नहीं है, और .charCodeAt() नहीं है। लेकिन यह QByteArray - .at() प्रतीत नहीं होता है। data[0]undefined है! यह है .toString() है।

मैं इसकी सामग्री कैसे एक्सेस करूं? जैसे अगर यह चार-बाइट uint32_t है, तो मैं उस नंबर को जावास्क्रिप्ट चर में कैसे प्राप्त करूं?

+0

QByteArray को ArrayBuffer रूपांतरण में प्राप्त करने में कुछ विकास प्रतीत होता है। चूंकि इसे कुछ दिन पहले विलय कर दिया गया था, इसलिए हमें शायद क्यूटी 5.8 तक इंतजार करना पड़ेगा। https://codereview.qt-project.org/#/c/144761/ – pwuertz

उत्तर

3

http://doc.qt.io/qt-5/qtqml-cppintegration-data.html और वर्तमान स्रोत http://code.woboq.org/qt5/qtdeclarative/src/qml/compiler/qqmltypecompiler.cpp.html#567 के अनुसार, QByteArray के बीच QML की ओर कोई रूपांतरण नहीं है। आपको शायद जेएस में एक अपारदर्शी, अप्राप्य वस्तु मिल जाएगी।

+0

ठीक है मुझे लगता है कि मुझे QByteArray को लपेटने के लिए अपना स्वयं का QObject- आधारित प्रकार बनाना होगा। – Timmmm

+2

कृपया QByteArray के लिए मैपिंग जोड़ने के लिए बगट्रैकर में एक सुझाव भी जोड़ें। इसे किसी प्रकार के जेएस ऐरे द्वारा समर्थित किया जा सकता है। – peppe

0

here में कहा गया है:

QML इंजन QByteArray मूल्यों और जावास्क्रिप्ट ArrayBuffer वस्तुओं के बीच स्वचालित जैसे रूपांतरण प्रदान करता है।

यह सुविधा Qt 5.8 के बाद उपलब्ध है।

संबंधित मुद्दे