首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将这些信息存储在qt中?列车员?

如何将这些信息存储在qt中?列车员?
EN

Stack Overflow用户
提问于 2016-06-07 22:40:25
回答 1查看 573关注 0票数 1

新蜜蜂来了。我很抱歉,如果有类似的问题,但我只是不知道如何正确地问它。问题是,我必须为大学做一些项目,现在我被困住了。我是通过udp获得信息,需要存储输出信息,以传递给对象(汽车坐标),我必须为20个对象这样做,因此它要复杂得多。我有这段代码,它应该是我的教授。告诉我了,但我得自己想办法把它储存起来。试过QList和QMap,但我想不出怎么可能

anArraynum.posX=somenumber;

所以我必须存储每辆车的坐标,当car1.x,car1.y,car1z,然后循环计数增加;car2.x等等。

我不知道我的问题或我想问的问题是否足够清楚,但请耐心等待

代码语言:javascript
运行
复制
while(mSocket->hasPendingDatagrams()){
        QByteArray datagram;
        QHostAddress crrAddress;
        quint16 crrPort;
        datagram.resize( int(mSocket->pendingDatagramSize()) );
        mSocket->readDatagram(datagram.data(), datagram.size(), &crrAddress, &crrPort);             
        double* resultList = new double[(datagram.size() / int(sizeof(double))) ];

        memcpy(&resultList[0], datagram.data(), size_t(datagram.size()));

        for(quint16 count = 0; (count) < mVehicleCount; count++) {
            mVehicleMap[mArrayOffset + count].ID = int16_t(resultList[7 + 11 * count]);
            mVehicleMap[mArrayOffset + count].pose.position.x = resultList[(1 + 11 * count)];
            mVehicleMap[mArrayOffset + count].pose.position.y = resultList[(2 + 11 * count)];
            mVehicleMap[mArrayOffset + count].pose.position.z = resultList[(3 + 11 * count)];
            mVehicleMap[mArrayOffset + count].pose.orientation.x = resultList[(6 + 11 * count)];
        }
        delete[] resultList;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 05:36:44

您可以使用QListQVector类来实现目标(Qt文档:QListQVector)。

QVector的简单示例

代码语言:javascript
运行
复制
    struct Vehicle
    {
        qint16 ID_;
        double position_x_;
        double position_y_;
        double position_z_;
        double orintation_x_;
    };

    ...

    QVector<Vehicle> vehicles(maxVehicleCount);  // maxVehicalCount - you variable

    ...

    while(mSocket->hasPendingDatagrams()){
            QByteArray datagram;
            QHostAddress crrAddress;
            quint16 crrPort;
            datagram.resize( int(mSocket->pendingDatagramSize()) );
            mSocket->readDatagram(datagram.data(), datagram.size(), &crrAddress, &crrPort);             
            double* resultList = new double[(datagram.size() / int(sizeof(double))) ];

            memcpy(&resultList[0], datagram.data(), size_t(datagram.size()));

            for(quint16 count = 0; (count) < mVehicleCount; count++) {
                vehicles[mArrayOffset + count].ID_ = qint16(resultList[7 + 11 * count]);
                vehicles[mArrayOffset + count].position_x_ = resultList[(1 + 11 * count)];
                vehicles[mArrayOffset + count].position_y_ = resultList[(2 + 11 * count)];
                vehicles[mArrayOffset + count].position_z_ = resultList[(3 + 11 * count)];
                vehicles[mArrayOffset + count].orintation_x_ = resultList[(6 + 11 * count)];
            }
            delete[] resultList;
    }

您还可以使用QMap类(Qt加法:QMap):

代码语言:javascript
运行
复制
    struct Vehicle
    {
        qint16 ID_;
        double position_x_;
        double position_y_;
        double position_z_;
        double orintation_x_;
    };

    ...

    QMap<qint16, Vehicle*> vehicleMap;

    ...

    while(true/*mSocket->hasPendingDatagrams()*/){
            QByteArray datagram;
            QHostAddress crrAddress;
            quint16 crrPort;
            datagram.resize( int(mSocket->pendingDatagramSize()) );
            mSocket->readDatagram(datagram.data(), datagram.size(), &crrAddress, &crrPort);             
            double* resultList = new double[(datagram.size() / int(sizeof(double))) ];

            memcpy(&resultList[0], datagram.data(), size_t(datagram.size()));

            for(quint16 count = 0; (count) < mVehicleCount; count++) {
                Vehicle* vehicle = new Vehicle();
                vehicle.ID_ = qint16(resultList[7 + 11 * count]);
                vehicle.position_x_ = resultList[(1 + 11 * count)];
                vehicle.position_y_ = resultList[(2 + 11 * count)];
                vehicle.position_z_ = resultList[(3 + 11 * count)];
                vehicle.orintation_x_ = resultList[(6 + 11 * count)];
                vehicleMap.insert(vehicle.ID_, vehicle);
            }
            delete[] resultList;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37690567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档