保存程序

This commit is contained in:
hm
2020-08-05 22:39:33 +08:00
parent f33888d422
commit 4d24e68e7d
14 changed files with 320 additions and 91 deletions
+125 -4
View File
@@ -1264,15 +1264,139 @@ void OPMapWidget::WPFollowPrevious(bool flag,WayPointItem *w)
}
//先清除再读取
void OPMapWidget::WPLoad(QString path)//带文件目录参数
{
qDebug() << "WPLoad" << path;
//读取
QFile jsonFile(path);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Unable to open file" << path << jsonFile.errorString();
return;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qWarning() << path << "Unable to open json document" << jsonParseError.errorString();
return;
}
QJsonObject json = doc.object();
//解码
QJsonValue jsonValue = json.value("mission");
qDebug() << jsonValue.toObject().keys();
}
void OPMapWidget::WPSave(QString path)//带文件目录参数
{
qDebug() << "WPSave" << path;
//保存到文件 *.plan,使用qgc的协议 json读写
QJsonDocument *doc = new QJsonDocument();
QJsonObject root= doc->object();
QJsonObject geoFence;
QJsonObject mission;
QJsonObject rallyPoints;
//geoFence节点写入
{
QJsonArray circles;
QJsonArray polygons;
geoFence.insert("circles",circles);
geoFence.insert("polygons",polygons);
geoFence.insert("version",2);
}
//mission节点写入
{
QJsonArray items;
foreach(QGraphicsItem * i, map->childItems()) {
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
if (w) {//逐渐往下增加
//存到items
QJsonArray params;
params.append(w->Param1());
params.append(w->Param2());
params.append(w->Param3());
params.append(w->Param4());
params.append(w->Coord().Lat());
params.append(w->Coord().Lng());
params.append(w->Alt());
//可能有点问题
QJsonObject item;
item.insert("AMSLAltAboveTerrain",0);
item.insert("Altitude",w->Alt());
item.insert("AltitudeMode",1);
item.insert("autoContinue",w->AutoContinue());
item.insert("command",w->Command());
item.insert("doJumpId",w->Number());
item.insert("frame",w->Frame());
item.insert("params",params);
item.insert("type","SimpleItem");
//这里有问题
items.append(item);
}
}
QJsonArray plannedHomePosition;
plannedHomePosition.append(0);
plannedHomePosition.append(1);
plannedHomePosition.append(2);
mission.insert("cruiseSpeed",2);
mission.insert("firmwareType",2);
mission.insert("hoverSpeed",2);
mission.insert("items",items);
mission.insert("plannedHomePosition",plannedHomePosition);
mission.insert("vehicleType",20);
mission.insert("version",2);
}
//rallyPoints节点写入
{
QJsonArray points;
rallyPoints.insert("points",points);
rallyPoints.insert("version",2);
}
//根节点写入
root.insert("fileType","Plan");
root.insert("geoFence",geoFence);
root.insert("groundStation","GCS_nf");
root.insert("mission", mission);
root.insert("rallyPoints", rallyPoints);
root.insert("version", 1);
//设置文档
doc->setObject(root);
//如果没有后缀名,那就追加
if(path.right(5) != ".plan")
{
path.append(".plan");
}
QFile file(path);
if(!file.open(QIODevice::ReadWrite|QFile::Truncate)) {
qDebug() << "File open error";
}
file.write(doc->toJson());
file.close();
}
void OPMapWidget::WPDownload(void)
@@ -1283,8 +1407,6 @@ void OPMapWidget::WPDownload(void)
WPDeleteAll();
emit signal_WPDownload(1,0);
}
void OPMapWidget::WPUpload(void)
@@ -1292,7 +1414,6 @@ void OPMapWidget::WPUpload(void)
//发送第一个
QList<mapcontrol::WayPointItem *> list;
//先发送一个清空指令
foreach(QGraphicsItem * i, map->childItems()) {
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
if (w) {