如何从UART到QList获取2D数组<;QString>;Qt和QML上的设置文本

如何从UART到QList获取2D数组<;QString>;Qt和QML上的设置文本,qt,qml,uart,qlist,qiodevice,Qt,Qml,Uart,Qlist,Qiodevice,我从UART接收到Arduino发送的2D数组。 我可以在调试中显示它,但我不能将它保存在QList变量中,以便在QML中为矩形矩阵设置文本 我想在每个矩形上显示QML上的文本 我该怎么办 这是Arduino代码。我发送2d阵列17x17 void setup(){ pinMode(LED_BUILTIN,OUTPUT); analogWrite(LED_BUILTIN,255); Serial.begin(115200); void loop(){ double

我从UART接收到Arduino发送的2D数组。 我可以在调试中显示它,但我不能将它保存在QList变量中,以便在QML中为矩形矩阵设置文本

我想在每个矩形上显示QML上的文本

我该怎么办

这是Arduino代码。我发送2d阵列17x17

void setup(){
    pinMode(LED_BUILTIN,OUTPUT);
    analogWrite(LED_BUILTIN,255);
    Serial.begin(115200);
void loop(){
    double data[17][17];
    if(Serial.available()){
        delay(100);
        for(int i=0; i<17; i++){
            for(int j=0; j<17; j++){
                data[i][j] = i+j+0.01;
                sendData(data[i][j]);
                delay(10);
            }
        }
    }
    return;
}

void sendData(double data){
    Serial.print((data));
}
序列号.h:

#include <QQmlApplicationEngine>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QtDebug>
class serial: public QObject
{
    Q_OBJECT
    Q_PROPERTY(QList<QString> text READ text  NOTIFY textChanged)

public:
    explicit serial(QQmlApplicationEngine *engine, QObject *parent = nullptr);
    ~serial();
    void setupSerial();

    Q_INVOKABLE QList<QString> text(){
        return m_text;
    }

private slots:
    void readSerial();
private:
    QQmlApplicationEngine* m_engine;

/* Varian of Arduino*/
    QSerialPort arduino;
    bool arduino_is_avaiable;
    QString portName;
    QByteArray serialData;

/*Varian of text*/
    QList<QString> m_text;
signals:
    void textChanged();

public slots:

};

#endif // SERIAL_H
#包括
#包括
#包括
#包括
类序列号:公共QObject
{
Q_对象
Q_属性(QList text READ text NOTIFY textChanged)
公众:
显式串行(QQmlApplicationEngine*引擎,QObject*父级=空PTR);
~serial();
void setupSerial();
Q_可调用的QList text(){
返回m_文本;
}
专用插槽:
void readSerial();
私人:
QQmlApplicationEngine*m_引擎;
/*阿尔杜伊诺的瓦里安*/
阿尔杜伊诺学院;
布尔·阿杜伊诺可用;
QString端口名;
QByteArray串行数据;
/*文本方差*/
qlistmu文本;
信号:
void textChanged();
公众时段:
};
#endif//SERIAL_H
main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "serial.h"

int main(int argc, char *argv[]) 
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    serial myserial(&engine);
    engine.rootContext()->setContextProperty("Serial", &myserial);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}
#包括
#包括
#包括
#包括“serial.h”
int main(int argc,char*argv[])
{
QGUI应用程序应用程序(argc、argv);
qqmlaplicationengine;
串行串行(和引擎);
engine.rootContext()->setContextProperty(“串行”和&myserial);
engine.load(QUrl(QStringLiteral(“qrc:/main.qml”));
返回app.exec();
}

我认为您缺少读取数据的
Serial
类的属性:
text:Serial.model\u data[index]
。要在屏幕上显示某些内容,最快的解决方案是添加该属性并按如下方式填充:

Serial.h(我遗漏了一些部分)

readSerial()
函数如下所示:

void Serial::readSerial()
{
    QByteArray serialData = QByteArray(17 * 17 * 8, 0); //shortcut for testing

    double *arr = reinterpret_cast<double*>(serialData.data());
    model_data_.clear();
    for(int i=0;i<17*17;i++)
    {
        model_data_.append(arr[i]);
    }
    emit modelDataChanged();
}
void Serial::readSerial()
{
QByteArray serialData=QByteArray(17*17*8,0);//测试的快捷方式
double*arr=reinterpret_cast(serialData.data());
模型_数据_uu.clear();
对于(int i=0;i
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "serial.h"

int main(int argc, char *argv[]) 
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    serial myserial(&engine);
    engine.rootContext()->setContextProperty("Serial", &myserial);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}
class Serial : public QObject
{
    Q_OBJECT

    Q_PROPERTY(QVariantList model_data READ model_data NOTIFY modelDataChanged)

public:
    explicit Serial(QObject *parent = nullptr);

    QVariantList model_data() const { return model_data_; }

signals:
    void modelDataChanged();

private slots:
    void readSerial();

private:
    QVariantList model_data_;
};
void Serial::readSerial()
{
    QByteArray serialData = QByteArray(17 * 17 * 8, 0); //shortcut for testing

    double *arr = reinterpret_cast<double*>(serialData.data());
    model_data_.clear();
    for(int i=0;i<17*17;i++)
    {
        model_data_.append(arr[i]);
    }
    emit modelDataChanged();
}