2016-06-07 19 views
0

新蜜蜂在這裏。 對不起,如果有類似的問題,但我只是不知道如何正確地問它。事情是,我必須爲uni做一些項目,我現在被卡住了。 我通過udp獲取信息,需要存儲產品信息以傳遞到對象(汽車座標) 我必須爲20個對象執行此操作,因此它要複雜得多。 我有這個代碼,它應該作爲我的教授工作。告訴我,但我必須弄清楚,我自己如何存儲它。 試過QList和QMap,但我無法弄清楚如何有可能有如何在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

您可以使用QListQVector類你的目標(Qt文檔:QListQVector)。

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

對不起,真的不知道這是必要的 –