رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران
  • 0
zahra

خواندن فایل در qml


سوال

سلام 

چطوری می تونم یک فایل باینری رو در qt  بخونم و داده هاش رو به صورت یک آرایه در qml  نمایش بدم؟

ممنون

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

5 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0
در 1 دقیقه قبل، zahra گفته است :

سلام 

چطوری می تونم یک فایل باینری رو در qt  بخونم و داده هاش رو به صورت یک آرایه در qml  نمایش بدم؟

ممنون

سلام،

این بستگی به این داره که چطور داده‌ای رو بخواهید بخونید و در چه قالبی تحتِ چه کنترلی نمایشش بدین.

برای کار با باینری در مورد کلاس‌های QFile و QDataStream تحقیق کنید.

در مورد نحوهٔ نمایش دادن هم باید کلاس‌های سمت ++C را در قالب مشتق شدهٔ QObject و در صورت نیاز به یک سری ویژگی‌های انتزاعی تحتِ یک سری کلاس‌های دیگر پیاده‌سازی کنید.

نمونه مستندات.

بهتر بود مثالی می‌زدین و کدی که نوشتین رو ارائه می‌کردین تا بررسی و راهکار مناسبی ارائه بشه.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

ممنون از پاسختون

من تازه کار با qt رو شروع کردم . الان یک فایل باینری رو با استفاده از دستورات QByteArray و QFile در qt می خونم و به مقادیرش دسترسی دارم. حالا می خوام با استفاده از روشهای موجود این داده ها رو به qml  ارسال کنم . و در مرحله بعدی این داده ها رو نمایش بدم.

QFile file("E:/Test.bin");
    qDebug() << ".... Here ";
    if (file.open(QIODevice::ReadOnly))
    {
         QByteArray blob = file.readAll();
         qint64 len =   blob.length();
         qDebug() << ".... Here " << len;
         for(int i =0; i< len; i++)
            qDebug() << "value : " <<  blob.at(i) << " ---- ";
    }
    qDebug() << "Results  : " << endl;

ساده ترین کار برای ارسال داده های QByteArray به qml چه روشی هست؟  آیا نمونه کدی هست که من بتونم ازش ایده بگیرم؟

ممنون

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 12 دقیقه قبل، zahra گفته است :

حالا می خوام با استفاده از روشهای موجود این داده ها رو به qml  ارسال کنم . و در مرحله بعدی این داده ها رو نمایش بدم.


ساده ترین کار برای ارسال داده های QByteArray به qml چه روشی هست؟  آیا نمونه کدی هست که من بتونم ازش ایده بگیرم؟

در پاسخ قبلی به این لینک اشاره کردم : https://doc.qt.io/qt-5/qtqml-cppintegration-topic.html نمونه کد‌های مشخصی داره، کافیه کلاس رو از نوع QObject مشتق کنید و سپس به یکی از روش‌های موجود، تابع خودتون رو پیاده سازی کرده و در نهایت برای QML رجیسترش کنید. برای مثال می‌تونید از روش‌های qmlRegisterType و rootContext استفاده کنید که روش‌های متفاوتی هستند.

همچنین این مستندات رو می‌تونید بررسی کنید : https://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 55 دقیقه قبل، zahra گفته است :

در خروجی که میخوام مقادیر QByteArray  رو بخونم ، پیغام undefined نشون میده .برای یک متغییر bool  درست کار می کنه ولی برای آرایه که بعدا میخوام مقادیر فایل رو در اون لود کنم، خطا میده. ممنون میشم اگر تجربه ای دارید راهنمایی کنید.

درود،

کد شما کمی نا منظم بود، به هر حال پیشنهاد می‌کنم نیاز خود مشابه این روش پیاده‌سازی کنید.

#ifndef MYCLASS_HPP
#define MYCLASS_HPP

#include <QObject>
#include <QByteArray>

class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QByteArray arr READ arr WRITE setArr NOTIFY arrChanged)
    Q_PROPERTY(quint8 length READ length WRITE setLength NOTIFY lengthChanged)
public:
explicit MyClass(QObject *parent = nullptr);
    ~MyClass();

public:
    const QByteArray arr() const;
    quint8 length() const;

signals:
    void arrChanged();
    void lengthChanged();

public slots:
    void setArr(const QByteArray& v);
    void setLength(quint8 l);

private:
    QByteArray m_arr;
    quint8 m_length;
};
#endif // MYCLASS_HPP
#include "myclass.hpp"
#include <QDebug>

MyClass::MyClass(QObject *parent) :
    QObject(parent)
{
    QByteArray myArr;
    myArr.push_back("A");
    myArr.push_back("B");
    myArr.push_back("C");
    myArr.push_back("D");
    myArr.push_back("E");
    setArr(myArr);
}

MyClass::~MyClass() {

}

const QByteArray MyClass::arr() const {
    return m_arr;
}

quint8 MyClass::length() const {
    return m_length;
}


void MyClass::setArr(const QByteArray& v) {

    if(m_arr.isNull()) {
        m_arr = v;
        setLength(m_arr.length());
    }
    emit arrChanged();
}

void MyClass::setLength(quint8 l) {
    m_length = l;
}
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

import com.org.myclass 1.0

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    MyClass{
        id: myClass
    }

    Component.onCompleted : {
        print("data : " , myClass.arr)
        print("length : " , myClass.length)
    }

}

 

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • -1

سلام 

من یک برنامه به شکل زیر ساختم : 

#ifndef MYCLASS_H
#define MYCLASS_H
#include <QtCore/QObject>
class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QByteArray arr READ getarr WRITE setarr NOTIFY ValueOnChanged)
public:
    explicit MyClass QObject *parent = nullptr);
    ~MyClass();
    const QByteArray & getarr() const { return m_arr; }
    void setarr(const QByteArray & v) {

        if (m_arr != NULL) {
             //m_arr = v;
            m_arr.resize(5);
            m_arr[0] = 0x3c;
            m_arr[1] = 0xb8;
            m_arr[2] = 0x64;
            m_arr[3] = 0x18;
            m_arr[4] = 0xca;
            emit ValueOnChanged();
        }
    }

signals:
    void ValueOnChanged();
private:
    QByteArray m_arr;
};
#endif // MYCLASS_H

و بعد تابع main.cpp رو به صورت زیر تغییر دادم : 

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "MyClass.h"
int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    //registering QML type here
       qmlRegisterType<MyClass>("com.org.myclass", 1, 0, "myclass");
    engine.load(url);
    return app.exec();
    return app.exec();
}

 و حالا در qml به این صورت به داده ها دسترسی دارم : 

import QtQuick 2.9
import QtQuick.Window 2.3
import QtQuick.Controls 2.2
import com.org.myclass1.0

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("qt-qml-module-example")

    MyClass{
        id: myClass
    }

    property variant varList
        Component.onCompleted : varList=myClass.arr
        onVarListChanged: {
            print("len : " , myClass.arr.length)
            for (var i in varList){
                console.log(i)
                print("----")
            }
        }

}

در خروجی که میخوام مقادیر QByteArray  رو بخونم ، پیغام undefined نشون میده .برای یک متغییر bool  درست کار می کنه ولی برای آرایه که بعدا میخوام مقادیر فایل رو در اون لود کنم، خطا میده. ممنون میشم اگر تجربه ای دارید راهنمایی کنید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...