2016-06-07 9 views
0

여기에 새 벌. 비슷한 질문이있는 경우 미안하지만 제대로 물어 보는 방법조차 모릅니다. 것은, 내가 유니에 대한 몇 가지 프로젝트를해야하고 지금 붙어있다. 나는 udp를 통해 정보를 얻고 있으며 객체 (자동차 좌표)에 전달할 항복 정보를 저장할 필요가있다. 20 개 객체에 대해 수행해야하므로 훨씬 더 복잡하다. 이 코드를 가지고 있으며 내 교수로 있어야합니다. 나에게 말했다. 그러나 나는 그것을 스스로 저장하는 방법을 알아야한다. QList 및 QMap 시도했지만 couldnt 수있는 방법 알아 내기Qt에이 정보를 저장하는 방법? arraylist-ish?

anArray [num] .posX = somenumber;

그래서 각 자동차의 좌표를 car1.x, car1.y, car1z로 저장해야합니다. 루프 수가 증가합니다. car2.x 등등.

난 내 질문이나 내가 묻고 싶은만큼 분명 알고 있지만 내가

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; 

답변

1

당신은 당신의 목표 (Qt는 문서 : QList, QVector)에 대한 QList 또는 QVector 클래스를 사용할 수 있습니다 참아주세요니까. QVector에 대한

간단한 예 :

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는 doucmentation : QMap를) 사용할 수는

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; 
    } 
+0

종류 낯선 감사합니다. 날 구해 줬어. –

+0

@AhmetBat 도움이 필요하시면 답변을 수락하십시오. – mvidelgauz

+0

죄송합니다, 정말 필요 없다는 것을 알지 못했습니다. –