1850 lines
62 KiB
C++
1850 lines
62 KiB
C++
#include "MissionUI.h"
|
|
#include "ui_MissionUI.h"
|
|
|
|
MissionUI::MissionUI(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::MissionUI)
|
|
{
|
|
ui->setupUi(this);
|
|
setWindowTitle(tr("Mission Table"));
|
|
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
|
//load qss
|
|
|
|
QFile file(":/qss/propertyui.qss");
|
|
file.open(QFile::ReadOnly);
|
|
QTextStream filetext(&file);
|
|
QString stylesheet = filetext.readAll();
|
|
this->setStyleSheet(stylesheet);
|
|
file.close();
|
|
|
|
this->setWhatsThis(tr("mission table"));
|
|
|
|
ui->label_Notice->adjustSize();
|
|
ui->label_Notice->setAlignment(Qt::AlignLeft | Qt::AlignTop);
|
|
ui->label_Notice->setWordWrap(true);
|
|
|
|
|
|
//围栏编辑
|
|
CustomButton *btn_addCircle = new CustomButton(this);
|
|
CustomButton *btn_addPolygon = new CustomButton(this);
|
|
|
|
btn_addCircle->setText(tr("Circle"));
|
|
btn_addPolygon->setText(tr("Polygon"));
|
|
|
|
btn_addCircle->setFixedSize(100,40);
|
|
btn_addPolygon->setFixedSize(100,40);
|
|
|
|
btn_addCircle->hide();
|
|
btn_addPolygon->hide();
|
|
|
|
|
|
connect(btn_addCircle,&CustomButton::clicked,[=](){
|
|
|
|
emit addCircle();
|
|
});
|
|
|
|
connect(btn_addPolygon,&CustomButton::clicked,[=](){
|
|
|
|
emit addPolygon();
|
|
});
|
|
|
|
|
|
|
|
//航线编辑
|
|
CustomButton *btn_load = new CustomButton(this);
|
|
CustomButton *btn_save = new CustomButton(this);
|
|
CustomButton *btn_upload = new CustomButton(this);
|
|
CustomButton *btn_download = new CustomButton(this);
|
|
CustomButton *btn_insert = new CustomButton(this);
|
|
CustomButton *btn_delete = new CustomButton(this);
|
|
CustomButton *btn_clean = new CustomButton(this);
|
|
CustomButton *btn_add = new CustomButton(this);
|
|
|
|
btn_load->setText(tr("load"));
|
|
btn_save->setText(tr("save"));
|
|
btn_upload->setText(tr("upload"));
|
|
btn_download->setText(tr("download"));
|
|
btn_insert->setText(tr("insert"));
|
|
btn_delete->setText(tr("delete"));
|
|
btn_clean->setText(tr("clean"));
|
|
btn_add->setText(tr("add"));
|
|
|
|
btn_load->setFixedSize(100,40);
|
|
btn_save->setFixedSize(100,40);
|
|
btn_upload->setFixedSize(100,40);
|
|
btn_download->setFixedSize(100,40);
|
|
btn_insert->setFixedSize(100,40);
|
|
btn_delete->setFixedSize(100,40);
|
|
btn_clean->setFixedSize(100,40);
|
|
btn_add->setFixedSize(100,40);
|
|
|
|
|
|
int btn_Count = 0;
|
|
ui->gridLayout_btn->addWidget(btn_load, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_save, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_upload, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_download,btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_insert, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_delete, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_clean, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_add, btn_Count++,0,1,1);
|
|
|
|
ui->gridLayout_btn->addWidget(btn_addCircle, btn_Count++,0,1,1);
|
|
ui->gridLayout_btn->addWidget(btn_addPolygon, btn_Count++,0,1,1);
|
|
|
|
ui->gridLayout_btn->setRowStretch(btn_Count++,1);
|
|
|
|
|
|
connect(btn_load,&CustomButton::clicked,[=](){
|
|
QFileDialog *dlg = new QFileDialog();
|
|
QString fileName = dlg->getOpenFileName(this, tr("Selete Way Point File..."),
|
|
"./plan/",
|
|
tr("plan file (*.plan)"));
|
|
if(!fileName.isEmpty())
|
|
{
|
|
emit WPLoad(fileName);
|
|
}
|
|
});
|
|
|
|
connect(btn_save,&CustomButton::clicked,[=](){
|
|
QFileDialog *dlg = new QFileDialog();
|
|
QString fileName = dlg->getSaveFileName(this, tr("Selete Way Point File..."),
|
|
"./plan/",
|
|
tr("plan file (*.plan)"));
|
|
if(!fileName.isEmpty())
|
|
{
|
|
emit WPSave(fileName);
|
|
}
|
|
});
|
|
|
|
connect(btn_upload,&CustomButton::clicked,[=](){
|
|
emit WPUpload();
|
|
});
|
|
|
|
connect(btn_download,&CustomButton::clicked,[=](){
|
|
QTableWidget *widget;
|
|
int tab_idx =ui->tabWidget->currentIndex();
|
|
switch (tab_idx) {
|
|
case 0:
|
|
widget = tablelist.value(1);
|
|
break;
|
|
case 1:
|
|
widget = tablelist.value(3);
|
|
break;
|
|
case 2:
|
|
widget = tablelist.value(4);
|
|
break;
|
|
case 3:
|
|
widget = tablelist.value(5);
|
|
break;
|
|
case 4:
|
|
widget = tablelist.value(6);
|
|
break;
|
|
default:
|
|
return;
|
|
break;
|
|
}
|
|
|
|
for(int row = 0;row < widget->rowCount();row++)
|
|
{
|
|
widget->removeRow(0);
|
|
}
|
|
|
|
for(int row = widget->rowCount() - 1;row >= 0; row--)
|
|
{
|
|
widget->removeRow(row);
|
|
}
|
|
|
|
emit WPDownload();
|
|
});
|
|
|
|
connect(btn_insert,&CustomButton::clicked,[=](){
|
|
emit WPInsert();
|
|
int group = 3;
|
|
//根据tabwidget
|
|
int tab_idx =ui->tabWidget->currentIndex();
|
|
|
|
switch (tab_idx) {
|
|
case 0:
|
|
group = 1;
|
|
break;
|
|
case 1:
|
|
group = 3;
|
|
break;
|
|
case 2:
|
|
group = 4;
|
|
break;
|
|
case 3:
|
|
group = 5;
|
|
break;
|
|
case 4:
|
|
group = 6;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
//删除完成后,刷新一次所有航点
|
|
emit getAllPoints(group);
|
|
emit getCurrentPoint(group);
|
|
});
|
|
|
|
connect(btn_delete,&CustomButton::clicked,[=](){
|
|
|
|
QTableWidget *widget;
|
|
//根据tabwidget
|
|
int tab_idx =ui->tabWidget->currentIndex();
|
|
if(tab_idx == 0)
|
|
{
|
|
widget = tablelist.value(1);
|
|
int row_id = widget->currentRow();
|
|
if(row_id >= 0)
|
|
{
|
|
int group = widget->item(row_id,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
|
|
|
|
|
|
for(int row = 0;row < widget->rowCount();row++)
|
|
{
|
|
if(group == widget->item(row,0)->data(Qt::DisplayRole).toInt())
|
|
widget->removeRow(row);
|
|
}
|
|
|
|
for(int row = widget->rowCount() - 1;row >= 0; row--)
|
|
{
|
|
if(group == widget->item(row,0)->data(Qt::DisplayRole).toInt())
|
|
widget->removeRow(row);
|
|
}
|
|
|
|
qDebug() << "group" << group << row_id;
|
|
emit delFence(group);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (tab_idx) {
|
|
case 0:
|
|
widget = tablelist.value(1);
|
|
break;
|
|
case 1:
|
|
widget = tablelist.value(3);
|
|
break;
|
|
case 2:
|
|
widget = tablelist.value(4);
|
|
break;
|
|
case 3:
|
|
widget = tablelist.value(5);
|
|
break;
|
|
case 4:
|
|
widget = tablelist.value(6);
|
|
break;
|
|
default:
|
|
return;
|
|
break;
|
|
}
|
|
int idx = widget->currentRow();
|
|
widget->removeRow(idx);
|
|
emit WPDelete();
|
|
//删除完成后,刷新一次所有航点
|
|
emit getAllPoints(tablelist.key(widget));
|
|
emit getCurrentPoint(tablelist.key(widget));
|
|
}
|
|
});
|
|
|
|
connect(btn_clean,&CustomButton::clicked,[=](){
|
|
QTableWidget *widget;
|
|
//根据tabwidget
|
|
int tab_idx =ui->tabWidget->currentIndex();
|
|
|
|
|
|
switch (tab_idx) {
|
|
case 0:
|
|
widget = tablelist.value(1);
|
|
break;
|
|
case 1:
|
|
widget = tablelist.value(3);
|
|
break;
|
|
case 2:
|
|
widget = tablelist.value(4);
|
|
break;
|
|
case 3:
|
|
widget = tablelist.value(5);
|
|
break;
|
|
case 4:
|
|
widget = tablelist.value(6);
|
|
break;
|
|
default:
|
|
return;
|
|
break;
|
|
}
|
|
|
|
for(int row = 0;row < widget->rowCount();row++)
|
|
{
|
|
widget->removeRow(0);
|
|
}
|
|
|
|
for(int row = widget->rowCount() - 1;row >= 0; row--)
|
|
{
|
|
widget->removeRow(row);
|
|
}
|
|
|
|
emit WPDeleteAll();
|
|
|
|
});
|
|
|
|
connect(btn_add,&CustomButton::clicked,[=](){
|
|
|
|
int tab_idx =ui->tabWidget->currentIndex();
|
|
|
|
emit WPAdd();
|
|
int group = 3;
|
|
|
|
switch (tab_idx) {
|
|
case 0:
|
|
group = 1;
|
|
break;
|
|
case 1:
|
|
group = 3;
|
|
break;
|
|
case 2:
|
|
group = 4;
|
|
break;
|
|
case 3:
|
|
group = 5;
|
|
break;
|
|
case 4:
|
|
group = 6;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
emit getAllPoints(group);
|
|
|
|
});
|
|
|
|
|
|
tablelist.insert(1,ui->tableWidget_1);
|
|
tablelist.insert(3,ui->tableWidget_3);
|
|
tablelist.insert(4,ui->tableWidget_4);
|
|
tablelist.insert(5,ui->tableWidget_5);
|
|
tablelist.insert(6,ui->tableWidget_6);
|
|
|
|
ui->tabWidget->setCurrentIndex(1);
|
|
|
|
foreach (QTableWidget *table, tablelist) {
|
|
if(table)
|
|
{
|
|
if(tablelist.key(table) == 1)//围栏
|
|
{
|
|
table->setColumnCount(7); //设置列数为7
|
|
table->setGeometry(QRect(10,455,740,95)); //设置tableWidget的大小
|
|
table->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中模式为选中行
|
|
table->setSelectionMode ( QAbstractItemView::SingleSelection); //设置选择模式,选择单行
|
|
table->setAlternatingRowColors(true);
|
|
table->setEditTriggers(QAbstractItemView::NoEditTriggers);//不能编辑
|
|
table->setMouseTracking(true);
|
|
table->setFocus();
|
|
table->setFocusPolicy(Qt::StrongFocus);
|
|
table->setStyleSheet("QTableWidget::item:selected { background-color: rgb(85, 255, 127); color: rgb(255, 255, 255); } ");
|
|
|
|
table->setColumnWidth(0,45); //设置第1列的列宽(group)
|
|
table->setColumnWidth(1,80); //设置第1列的列宽(type)
|
|
table->setColumnWidth(2,180); //设置第2列的列宽(par1)
|
|
table->setColumnWidth(3,80); //设置第3列的列宽(inclusion)
|
|
table->setColumnWidth(4,80); //设置第3列的列宽(inclusion)
|
|
table->setColumnWidth(5,150); //设置第4列的列宽(lat)
|
|
table->setColumnWidth(6,150); //设置第5列的列宽(lng)
|
|
|
|
|
|
table->setHorizontalHeaderLabels(QStringList() <<tr("group") << tr("shape") <<tr("Polygon(num)\nCircle(radius)")<<tr("inclusion")<<tr("points")<<tr("lat(deg)")<<tr("lng(deg)"));
|
|
QHeaderView* V_headerView = table->verticalHeader();
|
|
V_headerView->setHidden(true); //行名隐藏
|
|
|
|
QHeaderView* H_headerView = table->horizontalHeader();
|
|
H_headerView->setDefaultAlignment(Qt::AlignLeft); //表头信息显示居中靠左
|
|
H_headerView->setHighlightSections(false); //不高亮选中内容的所在列标题
|
|
H_headerView->setStretchLastSection(true);
|
|
|
|
|
|
connect(table,&QTableWidget::itemSelectionChanged,
|
|
this,&MissionUI::itemSelectionChanged);
|
|
|
|
connect(table,&QTableWidget::itemDoubleClicked,
|
|
this,&MissionUI::itemDoubleClicked);
|
|
|
|
connect(table,&QTableWidget::itemClicked,
|
|
this,&MissionUI::itemClicked);
|
|
}
|
|
else
|
|
{
|
|
table->setColumnCount(9); //设置列数为7
|
|
table->setGeometry(QRect(10,455,740,95)); //设置tableWidget的大小
|
|
table->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中模式为选中行
|
|
table->setSelectionMode ( QAbstractItemView::SingleSelection); //设置选择模式,选择单行
|
|
table->setAlternatingRowColors(true);
|
|
table->setEditTriggers(QAbstractItemView::NoEditTriggers);//不能编辑
|
|
table->setMouseTracking(true);
|
|
table->setFocus();
|
|
table->setFocusPolicy(Qt::StrongFocus);
|
|
table->setStyleSheet("QTableWidget::item:selected { background-color: rgb(85, 255, 127); color: rgb(255, 255, 255); } ");
|
|
|
|
table->setColumnWidth(0,45); //设置第一列的列宽(num)
|
|
table->setColumnWidth(1,80); //设置第二列的列宽(cmd)
|
|
table->setColumnWidth(2,80); //设置第三列的列宽(par1)
|
|
table->setColumnWidth(3,80); //设置第四列的列宽(par2)
|
|
table->setColumnWidth(4,80); //设置第五列的列宽(par3)
|
|
table->setColumnWidth(5,80); //设置第六列的列宽(par4)
|
|
table->setColumnWidth(6,150); //设置第七列的列宽(lat)
|
|
table->setColumnWidth(7,150); //设置第八列的列宽(lng)
|
|
table->setColumnWidth(8,80); //设置第九列的列宽(alt)
|
|
|
|
|
|
table->setHorizontalHeaderLabels(QStringList() <<tr("number")<<tr("command")<<tr("par1")<<tr("par2")<<tr("par3")<<tr("par4")<<tr("lat(deg)")<<tr("lng(deg)")<<tr("alt(m)"));
|
|
QHeaderView* V_headerView = table->verticalHeader();
|
|
V_headerView->setHidden(true); //行名隐藏
|
|
|
|
QHeaderView* H_headerView = table->horizontalHeader();
|
|
H_headerView->setDefaultAlignment(Qt::AlignLeft); //表头信息显示居中靠左
|
|
H_headerView->setHighlightSections(false); //不高亮选中内容的所在列标题
|
|
H_headerView->setStretchLastSection(true);
|
|
|
|
|
|
connect(table,&QTableWidget::itemSelectionChanged,
|
|
this,&MissionUI::itemSelectionChanged);
|
|
|
|
connect(table,&QTableWidget::itemDoubleClicked,
|
|
this,&MissionUI::itemDoubleClicked);
|
|
|
|
connect(table,&QTableWidget::itemClicked,
|
|
this,&MissionUI::itemClicked);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
connect(ui->tabWidget,&QTabWidget::tabBarClicked,[=](int index){
|
|
int group = 3;
|
|
|
|
switch (index) {
|
|
case 0:
|
|
group = 1;
|
|
break;
|
|
case 1:
|
|
group = 3;
|
|
break;
|
|
case 2:
|
|
group = 4;
|
|
break;
|
|
case 3:
|
|
group = 5;
|
|
break;
|
|
case 4:
|
|
group = 6;
|
|
break;
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
if(index == 0)
|
|
{
|
|
btn_addCircle->setEnabled(true);
|
|
btn_addPolygon->setEnabled(true);
|
|
|
|
btn_load->setEnabled(true);
|
|
btn_save->setEnabled(true);
|
|
btn_upload->setEnabled(true);
|
|
btn_download->setEnabled(true);
|
|
btn_insert->setEnabled(true);
|
|
btn_delete->setEnabled(true);
|
|
btn_clean->setEnabled(true);
|
|
btn_add->setEnabled(true);
|
|
|
|
btn_addCircle->show();
|
|
btn_addPolygon->show();
|
|
|
|
btn_load->show();
|
|
btn_save->show();
|
|
btn_upload->show();
|
|
btn_download->show();
|
|
btn_insert->hide();
|
|
btn_delete->show();
|
|
//btn_clean->hide();
|
|
btn_add->hide();
|
|
}
|
|
else if(index <= 4)
|
|
{
|
|
btn_addCircle->setEnabled(true);
|
|
btn_addPolygon->setEnabled(true);
|
|
|
|
btn_load->setEnabled(true);
|
|
btn_save->setEnabled(true);
|
|
btn_upload->setEnabled(true);
|
|
btn_download->setEnabled(true);
|
|
btn_insert->setEnabled(true);
|
|
btn_delete->setEnabled(true);
|
|
btn_clean->setEnabled(true);
|
|
btn_add->setEnabled(true);
|
|
|
|
btn_addCircle->hide();
|
|
btn_addPolygon->hide();
|
|
|
|
btn_load->show();
|
|
btn_save->show();
|
|
btn_upload->show();
|
|
btn_download->show();
|
|
btn_insert->show();
|
|
btn_delete->show();
|
|
btn_clean->show();
|
|
btn_add->show();
|
|
}
|
|
else
|
|
{
|
|
btn_addCircle->setEnabled(false);
|
|
btn_addPolygon->setEnabled(false);
|
|
|
|
btn_load->setEnabled(false);
|
|
btn_save->setEnabled(false);
|
|
btn_upload->setEnabled(false);
|
|
btn_download->setEnabled(false);
|
|
btn_insert->setEnabled(false);
|
|
btn_delete->setEnabled(false);
|
|
btn_clean->setEnabled(false);
|
|
btn_add->setEnabled(false);
|
|
|
|
|
|
//从文件打开一个叫做mission_Instructions.txt的文档,把里面的内容写进来
|
|
QFile Instructions("./Config/mission_Instructions.txt");
|
|
Instructions.open(QFile::ReadOnly);
|
|
QTextStream filetext(&Instructions);
|
|
QString text = filetext.readAll();
|
|
ui->label_Notice->setText(text);
|
|
Instructions.close();
|
|
}
|
|
|
|
|
|
QTableWidget *widget = tablelist.value(group);
|
|
int idx = widget->currentRow() + 1;
|
|
qDebug() << "tabWidget_currentChanged" << group << idx;
|
|
emit waypointSelect(group,idx);
|
|
});
|
|
|
|
}
|
|
|
|
MissionUI::~MissionUI()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void MissionUI::deleteGroupAllPoint(int group)
|
|
{
|
|
QTableWidget *table;
|
|
switch(group)
|
|
{
|
|
case 1: table = ui->tableWidget_1; break;
|
|
// case 2: group = 5; break;
|
|
case 3: table = ui->tableWidget_3; break;
|
|
case 4: table = ui->tableWidget_4; break;
|
|
case 5: table = ui->tableWidget_5; break;
|
|
case 6: table = ui->tableWidget_6; break;
|
|
}
|
|
qDebug() << u8"组:" << group;
|
|
// QTableWidget *table = qobject_cast<QTableWidget *>(ui->tabWidget->widget(group) );
|
|
if(table)
|
|
{
|
|
qDebug() << u8"删除所有航点";
|
|
int rowCount = table->rowCount();
|
|
for(int i = 0; i < rowCount; ++i) //删除组中所有的数据
|
|
{
|
|
qDebug() << u8"Mission: 删除航点";
|
|
table->removeRow(0);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void MissionUI::closeEvent(QCloseEvent *event)
|
|
{
|
|
event->ignore();
|
|
this->setHidden(true);
|
|
}
|
|
|
|
void MissionUI::resizeEvent(QResizeEvent *event)
|
|
{
|
|
|
|
}
|
|
|
|
void MissionUI::clearTable()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MissionUI::createFenceCircle(int group,qreal radius,bool inclusion,qreal lat,qreal lng)
|
|
{
|
|
QTableWidget *tableWidget = tablelist.value(1);
|
|
if(!tableWidget)
|
|
{
|
|
qDebug() << "UNFIND TABLE";
|
|
return;
|
|
}
|
|
|
|
int idx = tableWidget->rowCount();
|
|
|
|
tableWidget->setRowCount(tableWidget->rowCount()+1); //设置行数+1
|
|
|
|
tableWidget->removeCellWidget(idx,0);
|
|
tableWidget->setItem(idx,0,new QTableWidgetItem(QString::number(group))); //第一列的内容设置为index
|
|
|
|
tableWidget->removeCellWidget(idx,1);
|
|
tableWidget->setItem(idx,1,new QTableWidgetItem(tr("Circle")));
|
|
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(QString::number(radius)));
|
|
|
|
|
|
QString inclusionName;
|
|
switch (inclusion) {
|
|
case 1:
|
|
inclusionName = tr("inclusion");
|
|
break;
|
|
case 0:
|
|
inclusionName = tr("exclusion");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
QTableWidgetItem *item3 = new QTableWidgetItem(inclusionName);
|
|
item3->setCheckState((inclusion)?(Qt::Checked):(Qt::Unchecked));
|
|
|
|
tableWidget->removeCellWidget(idx,3);
|
|
tableWidget->setItem(idx,3,item3);
|
|
|
|
tableWidget->removeCellWidget(idx,4);
|
|
tableWidget->setItem(idx,4,new QTableWidgetItem(QString::number(1)));
|
|
|
|
tableWidget->removeCellWidget(idx,5);
|
|
tableWidget->setItem(idx,5,new QTableWidgetItem(QString::number(lat ,'f',7)));
|
|
|
|
tableWidget->removeCellWidget(idx,6);
|
|
tableWidget->setItem(idx,6,new QTableWidgetItem(QString::number(lng ,'f',7)));
|
|
|
|
|
|
for (int i = 0;i<tableWidget->rowCount();i++)
|
|
{
|
|
if(tableWidget->item(i,0)==NULL|| //判断指向该cell的指针是否为空
|
|
(tableWidget->item(i,0)&&
|
|
tableWidget->item(i,0)->text()==tr(""))) //判断该cell的text是否为空
|
|
{
|
|
tableWidget->removeRow(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
void MissionUI::createFencePolygon(int group,qreal vertex, bool inclusion, QList<QPointF> latlng)
|
|
{
|
|
QTableWidget *tableWidget = tablelist.value(1);
|
|
if(!tableWidget)
|
|
{
|
|
qDebug() << "UNFIND TABLE";
|
|
return;
|
|
}
|
|
|
|
int count = 1;
|
|
|
|
int startIndex = tableWidget->rowCount();
|
|
for(QPointF p:latlng)
|
|
{
|
|
qreal lat = p.x();
|
|
qreal lng = p.y();
|
|
|
|
int idx = tableWidget->rowCount();
|
|
tableWidget->setRowCount(tableWidget->rowCount()+1); //设置行数+1
|
|
|
|
tableWidget->removeCellWidget(idx,0);
|
|
tableWidget->setItem(idx,0,new QTableWidgetItem(QString::number(group))); //第一列的内容设置为index
|
|
|
|
tableWidget->removeCellWidget(idx,1);
|
|
tableWidget->setItem(idx,1,new QTableWidgetItem(tr("Polygon")));
|
|
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(QString::number(vertex)));
|
|
|
|
|
|
QString inclusionName;
|
|
switch (inclusion) {
|
|
case 1:
|
|
inclusionName = tr("inclusion");
|
|
break;
|
|
case 0:
|
|
inclusionName = tr("exclusion");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
QTableWidgetItem *item3 = new QTableWidgetItem(inclusionName);
|
|
item3->setCheckState((inclusion)?(Qt::Checked):(Qt::Unchecked));
|
|
|
|
tableWidget->removeCellWidget(idx,3);
|
|
tableWidget->setItem(idx,3,item3);
|
|
|
|
tableWidget->removeCellWidget(idx,4);
|
|
tableWidget->setItem(idx,4,new QTableWidgetItem(QString::number(count++)));
|
|
|
|
tableWidget->removeCellWidget(idx,5);
|
|
tableWidget->setItem(idx,5,new QTableWidgetItem(QString::number(lat ,'f',7)));
|
|
|
|
tableWidget->removeCellWidget(idx,6);
|
|
tableWidget->setItem(idx,6,new QTableWidgetItem(QString::number(lng ,'f',7)));
|
|
}
|
|
|
|
int endIndex = tableWidget->rowCount();
|
|
|
|
tableWidget->setSpan(startIndex,0,endIndex - startIndex,1);
|
|
tableWidget->setSpan(startIndex,1,endIndex - startIndex,1);
|
|
tableWidget->setSpan(startIndex,2,endIndex - startIndex,1);
|
|
tableWidget->setSpan(startIndex,3,endIndex - startIndex,1);
|
|
|
|
|
|
|
|
for (int i = 0;i<tableWidget->rowCount();i++)
|
|
{
|
|
if(tableWidget->item(i,0)==NULL|| //判断指向该cell的指针是否为空
|
|
(tableWidget->item(i,0)&&
|
|
tableWidget->item(i,0)->text()==tr(""))) //判断该cell的text是否为空
|
|
{
|
|
tableWidget->removeRow(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
void MissionUI::updateFenceCircle(int group,qreal radius, bool inclusion, qreal lat, qreal lng)
|
|
{
|
|
QTableWidget *tableWidget = tablelist.value(1);
|
|
if(!tableWidget)
|
|
{
|
|
qDebug() << "UNFIND TABLE";
|
|
return;
|
|
}
|
|
|
|
//找第一个index
|
|
int row_id = -1;
|
|
for(int i = 0;i< tableWidget->rowCount();i++)
|
|
{
|
|
int gv = tableWidget->item(i,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
|
|
if(gv == group)
|
|
{
|
|
row_id = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(row_id == -1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
tableWidget->removeCellWidget(row_id,2);
|
|
tableWidget->setItem(row_id,2,new QTableWidgetItem(QString::number(radius)));
|
|
|
|
|
|
QString inclusionName;
|
|
switch (inclusion) {
|
|
case 1:
|
|
inclusionName = tr("inclusion");
|
|
break;
|
|
case 0:
|
|
inclusionName = tr("exclusion");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
QTableWidgetItem *item3 = new QTableWidgetItem(inclusionName);
|
|
item3->setCheckState((inclusion)?(Qt::Checked):(Qt::Unchecked));
|
|
|
|
tableWidget->removeCellWidget(row_id,3);
|
|
tableWidget->setItem(row_id,3,item3);
|
|
|
|
tableWidget->removeCellWidget(row_id,4);
|
|
tableWidget->setItem(row_id,4,new QTableWidgetItem(QString::number(1)));
|
|
|
|
tableWidget->removeCellWidget(row_id,5);
|
|
tableWidget->setItem(row_id,5,new QTableWidgetItem(QString::number(lat ,'f',7)));
|
|
|
|
tableWidget->removeCellWidget(row_id,6);
|
|
tableWidget->setItem(row_id,6,new QTableWidgetItem(QString::number(lng ,'f',7)));
|
|
}
|
|
|
|
void MissionUI::updateFencePolygon(int group,qreal vertex,bool inclusion,QList<QPointF> latlng)
|
|
{
|
|
QTableWidget *tableWidget = tablelist.value(1);
|
|
if(!tableWidget)
|
|
{
|
|
qDebug() << "UNFIND TABLE";
|
|
return;
|
|
}
|
|
|
|
//找第一个index
|
|
int startIndex = -1;
|
|
bool isGetStart = false;
|
|
int endIndex = -1;
|
|
for(int i = 0;i< tableWidget->rowCount();i++)
|
|
{
|
|
int gv = tableWidget->item(i,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
|
|
if(isGetStart == false)//还没得到开头
|
|
{
|
|
if(gv == group)
|
|
{
|
|
startIndex = i;
|
|
isGetStart = true;
|
|
}
|
|
}
|
|
else//已经得到开头,寻找结束项
|
|
{
|
|
if(gv != group)
|
|
{
|
|
endIndex = i;
|
|
}
|
|
}
|
|
}
|
|
|
|
if((startIndex == -1)&&(endIndex == -1))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(vertex > (endIndex - startIndex))
|
|
{
|
|
//tableWidget->insertRow(endIndex);//增肌行
|
|
}
|
|
else if(vertex < (endIndex - startIndex))//说明减少了点
|
|
{
|
|
//tableWidget->insertRow(endIndex);//减少行
|
|
}
|
|
|
|
int count = 1;
|
|
int idx = startIndex;
|
|
for(QPointF p:latlng)
|
|
{
|
|
qreal lat = p.x();
|
|
qreal lng = p.y();
|
|
|
|
tableWidget->removeCellWidget(idx,0);
|
|
tableWidget->setItem(idx,0,new QTableWidgetItem(QString::number(group)));
|
|
|
|
//tableWidget->removeCellWidget(idx,1);
|
|
//tableWidget->setItem(idx,1,new QTableWidgetItem(QString::number(vertex)));
|
|
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(QString::number(vertex)));
|
|
|
|
|
|
QString inclusionName;
|
|
switch (inclusion) {
|
|
case 1:
|
|
inclusionName = tr("inclusion");
|
|
break;
|
|
case 0:
|
|
inclusionName = tr("exclusion");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
QTableWidgetItem *item3 = new QTableWidgetItem(inclusionName);
|
|
item3->setCheckState((inclusion)?(Qt::Checked):(Qt::Unchecked));
|
|
|
|
tableWidget->removeCellWidget(idx,3);
|
|
tableWidget->setItem(idx,3,item3);
|
|
|
|
tableWidget->removeCellWidget(idx,4);
|
|
tableWidget->setItem(idx,4,new QTableWidgetItem(QString::number(count++)));
|
|
|
|
tableWidget->removeCellWidget(idx,5);
|
|
tableWidget->setItem(idx,5,new QTableWidgetItem(QString::number(lat ,'f',7)));
|
|
|
|
tableWidget->removeCellWidget(idx,6);
|
|
tableWidget->setItem(idx,6,new QTableWidgetItem(QString::number(lng ,'f',7)));
|
|
|
|
idx++;
|
|
}
|
|
|
|
//tableWidget->setSpan(startIndex,0,endIndex - startIndex,1);
|
|
//tableWidget->setSpan(startIndex,1,endIndex - startIndex,1);
|
|
//tableWidget->setSpan(startIndex,2,endIndex - startIndex,1);
|
|
//tableWidget->setSpan(startIndex,3,endIndex - startIndex,1);
|
|
|
|
}
|
|
|
|
void MissionUI::FenceGroupChanged(int old,int cur)
|
|
{
|
|
|
|
|
|
QTableWidget *tableWidget = tablelist.value(1);
|
|
if(!tableWidget)
|
|
{
|
|
qDebug() << "UNFIND TABLE";
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
for (int idx = 0;idx<tableWidget->rowCount();idx++)
|
|
{
|
|
int group = tableWidget->item(idx,0)->data(Qt::DisplayRole).toInt();
|
|
|
|
qDebug() << "group changed" << old << cur << group;
|
|
|
|
if(group == old)
|
|
{
|
|
tableWidget->removeCellWidget(idx,0);
|
|
tableWidget->setItem(idx,0,new QTableWidgetItem(QString::number(cur))); //第一列的内容设置为index
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MissionUI::pointCreate(float param1,float param2,float param3,float param4,
|
|
int32_t x,int32_t y,float z,
|
|
uint16_t seq,
|
|
uint16_t group,
|
|
uint16_t command,
|
|
uint8_t target_system,
|
|
uint8_t target_component,
|
|
uint8_t frame,
|
|
uint8_t current,
|
|
uint8_t autocontinue,
|
|
uint8_t mission_type)
|
|
{
|
|
QTableWidget *tableWidget;
|
|
|
|
foreach (QTableWidget *table, tablelist) {
|
|
if(table)
|
|
{
|
|
if(tablelist.value(mission_type) == table)
|
|
{
|
|
tableWidget = table;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
int idx = seq -1;
|
|
|
|
tableWidget->setRowCount(tableWidget->rowCount()+1); //设置行数+1
|
|
tableWidget->setItem(idx,0,new QTableWidgetItem(QString::number(seq))); //第一列的内容设置为index
|
|
|
|
QString cmdName;
|
|
switch (command) {
|
|
case 16:
|
|
cmdName = tr("航点");
|
|
break;
|
|
case 20:
|
|
cmdName = tr("返航");
|
|
break;
|
|
case 21:
|
|
cmdName = tr("降落");
|
|
break;
|
|
case 22:
|
|
cmdName = tr("起飞");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
tableWidget->removeCellWidget(idx,1);
|
|
tableWidget->setItem(idx,1,new QTableWidgetItem(cmdName));
|
|
|
|
if(command == 16)
|
|
{
|
|
QString par1Name;
|
|
switch ((int)param1) {
|
|
case 0:
|
|
par1Name = tr("保持");
|
|
break;
|
|
case -1:
|
|
par1Name = tr("表速");
|
|
break;
|
|
case -2:
|
|
par1Name = tr("快升");
|
|
break;
|
|
case -3:
|
|
par1Name = tr("开加力");
|
|
break;
|
|
case -4:
|
|
par1Name = tr("关加力");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(par1Name));
|
|
}
|
|
else if(command == 20)
|
|
{
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(QString::number(param1)));
|
|
}
|
|
else if(command == 21)
|
|
{
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(QString::number(param1)));
|
|
}
|
|
else if(command == 22)
|
|
{
|
|
tableWidget->removeCellWidget(idx,2);
|
|
tableWidget->setItem(idx,2,new QTableWidgetItem(QString::number(param1)));
|
|
}
|
|
|
|
tableWidget->removeCellWidget(idx,3);
|
|
tableWidget->setItem(idx,3,new QTableWidgetItem(QString::number(param2)));
|
|
|
|
tableWidget->removeCellWidget(idx,4);
|
|
tableWidget->setItem(idx,4,new QTableWidgetItem(QString::number(param3)));
|
|
|
|
tableWidget->removeCellWidget(idx,5);
|
|
tableWidget->setItem(idx,5,new QTableWidgetItem(QString::number(param4)));
|
|
|
|
tableWidget->removeCellWidget(idx,6);
|
|
tableWidget->setItem(idx,6,new QTableWidgetItem(QString::number(x * 10e-8,'f',7)));
|
|
|
|
tableWidget->removeCellWidget(idx,7);
|
|
tableWidget->setItem(idx,7,new QTableWidgetItem(QString::number(y * 10e-8,'f',7)));
|
|
|
|
tableWidget->removeCellWidget(idx,8);
|
|
tableWidget->setItem(idx,8,new QTableWidgetItem(QString::number(z)));
|
|
|
|
for (int i = 0;i<tableWidget->rowCount();i++)
|
|
{
|
|
if(tableWidget->item(i,0)==NULL|| //判断指向该cell的指针是否为空
|
|
(tableWidget->item(i,0)&&
|
|
tableWidget->item(i,0)->text()==tr(""))) //判断该cell的text是否为空
|
|
{
|
|
tableWidget->removeRow(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
void MissionUI::pointDelete(int idx)
|
|
{
|
|
/*
|
|
if(tableWidget->rowAt(idx) != -1)
|
|
{
|
|
tableWidget->removeRow(idx); //删除掉了表格信息
|
|
}
|
|
*/
|
|
}
|
|
|
|
void MissionUI::currentPointSeleted(int group,int point)
|
|
{
|
|
/*
|
|
qDebug() << "Selete" << group << point;
|
|
|
|
QTableWidget *widget = tablelist.value(group);
|
|
if(widget)
|
|
{
|
|
widget->selectRow(point - 1);
|
|
}
|
|
*/
|
|
}
|
|
|
|
void MissionUI::setCurrent(int group,int idx)
|
|
{
|
|
QTableWidget *widget = tablelist.value(group);
|
|
if(widget)
|
|
{
|
|
widget->selectRow(idx - 1);
|
|
}
|
|
|
|
//settableGroup(group);//切换会引起变化事件,导致重新刷新
|
|
}
|
|
|
|
void MissionUI::settableGroup(int group)
|
|
{
|
|
int index = 0;
|
|
|
|
switch (group) {
|
|
case 1:
|
|
index = 0;
|
|
break;
|
|
case 3:
|
|
index = 1;
|
|
break;
|
|
case 4:
|
|
index = 2;
|
|
break;
|
|
case 5:
|
|
index = 3;
|
|
break;
|
|
case 6:
|
|
index = 4;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
ui->tabWidget->setCurrentIndex(index);
|
|
}
|
|
|
|
|
|
void MissionUI::itemSelectionChanged()
|
|
{
|
|
QTableWidget *widget = qobject_cast<QTableWidget *>(sender());
|
|
|
|
if(widget == tablelist.value(1))
|
|
{
|
|
return;
|
|
}
|
|
|
|
int group = tablelist.key(widget);
|
|
int idx = widget->currentRow() + 1;
|
|
|
|
qDebug() << "itemSelectionChanged" << group << idx;
|
|
|
|
//emit waypointSelect(group,idx);
|
|
|
|
}
|
|
|
|
void MissionUI::itemClicked(QTableWidgetItem *item)
|
|
{
|
|
QTableWidget *widget = qobject_cast<QTableWidget *>(sender());
|
|
|
|
int group = tablelist.key(widget);
|
|
int idx = widget->currentRow() + 1;
|
|
|
|
int row=item->row();
|
|
int column = item->column();
|
|
|
|
|
|
if(widget == tablelist.value(1))
|
|
{
|
|
if(column == 3)
|
|
{
|
|
if(item->checkState() == Qt::Checked)//包含
|
|
{
|
|
QString inclusionName = tr("inclusion");
|
|
item->setText(inclusionName);
|
|
}
|
|
else//不包含
|
|
{
|
|
QString inclusionName = tr("exclusion");
|
|
item->setText(inclusionName);
|
|
}
|
|
}
|
|
|
|
int gidx = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
//找到开始的idx
|
|
int StartIdx = widget->item(row,0)->row();
|
|
for (int i = 0; i < widget->rowCount(); ++i) {
|
|
if(widget->item(i,0)->data(Qt::DisplayRole).toInt() == gidx)
|
|
{
|
|
StartIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SpanCount = widget->rowSpan(row,0);
|
|
|
|
QString type = widget->item(StartIdx,1)->data(Qt::DisplayRole).toString();//得到type
|
|
qreal par = widget->item(StartIdx,2)->data(Qt::DisplayRole).toDouble();//得到par
|
|
bool inclusion = widget->item(StartIdx,3)->checkState()?(true):(false);
|
|
|
|
if(type == tr("Circle"))
|
|
{
|
|
qreal latitude = widget->item(row,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(row,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
emit setFenceCircle(gidx,par,inclusion,latitude,longitude);//修改圆形
|
|
|
|
}
|
|
else if(type == tr("Polygon"))
|
|
{
|
|
//从头获取所有点
|
|
QList<QPointF> latlng;
|
|
latlng.clear();
|
|
|
|
for(int i = StartIdx;i<(StartIdx + SpanCount);i++)
|
|
{
|
|
qreal latitude = widget->item(i,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(i,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
latlng.push_back(QPointF(latitude,longitude));
|
|
}
|
|
|
|
emit setFencePolygon(gidx,par,inclusion,latlng);
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
emit waypointSelect(group,idx);//告诉底层要切换航点,切换航点后,会对表格进行设置,这个有问题,会导致表格重复刷新
|
|
}
|
|
}
|
|
|
|
|
|
void MissionUI::itemDoubleClicked(QTableWidgetItem *item)
|
|
{
|
|
QTableWidget *widget = qobject_cast<QTableWidget *>(sender());
|
|
|
|
int group = tablelist.key(widget);
|
|
int idx = widget->currentRow() + 1;
|
|
|
|
int row=item->row();
|
|
int column = item->column();
|
|
|
|
|
|
if(widget == tablelist.value(1))
|
|
{
|
|
if(column == 2)
|
|
{
|
|
QString type = widget->item(row,1)->data(Qt::DisplayRole).toString();//得到type
|
|
if(type == tr("Circle"))
|
|
{
|
|
QLineEdit *line = new QLineEdit(widget);
|
|
line->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
line->setText(item->data(Qt::DisplayRole).toString());
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,line);
|
|
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
item->setText(str);
|
|
}
|
|
|
|
int gidx = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
//找到开始的idx
|
|
int StartIdx = widget->item(row,0)->row();
|
|
for (int i = 0; i < widget->rowCount(); ++i) {
|
|
if(widget->item(i,0)->data(Qt::DisplayRole).toInt() == gidx)
|
|
{
|
|
StartIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
qreal par = widget->item(StartIdx,2)->data(Qt::DisplayRole).toDouble();//得到par
|
|
bool inclusion = widget->item(StartIdx,3)->checkState()?(true):(false);
|
|
|
|
qreal latitude = widget->item(row,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(row,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
emit setFenceCircle(gidx,par,inclusion,latitude,longitude);//修改圆形
|
|
}
|
|
});
|
|
}
|
|
else if(type == tr("Polygon"))
|
|
{
|
|
QLineEdit *line = new QLineEdit(widget);
|
|
line->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
line->setText(item->data(Qt::DisplayRole).toString());
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,line);
|
|
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toInt(&ok);
|
|
if(ok)
|
|
{
|
|
if(str.toInt() >= 3)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
item->setText(str);
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
//得到新的行数
|
|
int startIndex = -1;
|
|
bool isGetStart = false;
|
|
int endIndex = -1;
|
|
int gv = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
for(int i = 0;i< widget->rowCount();i++)
|
|
{
|
|
if(isGetStart == false)//还没得到开头
|
|
{
|
|
if(gv == widget->item(i,0)->data(Qt::DisplayRole).toInt())
|
|
{
|
|
startIndex = i;
|
|
isGetStart = true;
|
|
}
|
|
}
|
|
else//已经得到开头,寻找结束项
|
|
{
|
|
|
|
if(gv != widget->item(i,0)->data(Qt::DisplayRole).toInt())
|
|
{
|
|
endIndex = i;
|
|
break;
|
|
}
|
|
else//相等的情况
|
|
{
|
|
if(i == (widget->rowCount() - 1))//最后一个
|
|
{
|
|
if(gv == widget->item(i,0)->data(Qt::DisplayRole).toInt())
|
|
{
|
|
endIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if((startIndex == -1)&&(endIndex == -1))
|
|
{
|
|
return;
|
|
}
|
|
|
|
//在当前选中的这一行下方插入一个点增加一个点
|
|
int newVertex = str.toInt();
|
|
int oldVertex = widget->rowSpan(row,0);
|
|
qDebug() << "row" << newVertex << oldVertex << startIndex << endIndex << gv;
|
|
if(newVertex > oldVertex)//增加
|
|
{
|
|
for(int i = 0;i<(newVertex - oldVertex);i++)
|
|
{
|
|
bool inclusion = widget->item(startIndex,3)->checkState()?(true):(false);
|
|
|
|
qreal lat1 = widget->item(startIndex + 1,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal lng1 = widget->item(startIndex + 1,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
qreal lat2 = widget->item(startIndex,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal lng2 = widget->item(startIndex,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
|
|
qreal lat = (lat1 +lat2)/2.0;
|
|
qreal lng = (lng1 +lng2)/2.0;
|
|
|
|
|
|
widget->insertRow(endIndex - 1);
|
|
|
|
widget->removeCellWidget(endIndex - 1,0);
|
|
widget->setItem(endIndex - 1,0,new QTableWidgetItem(QString::number(gv))); //第一列的内容设置为index
|
|
|
|
widget->removeCellWidget(endIndex - 1,1);
|
|
widget->setItem(endIndex - 1,1,new QTableWidgetItem(tr("Polygon")));
|
|
|
|
widget->removeCellWidget(endIndex - 1,2);
|
|
widget->setItem(endIndex - 1,2,new QTableWidgetItem(QString::number(newVertex)));
|
|
|
|
|
|
QString inclusionName;
|
|
switch (inclusion) {
|
|
case 1:
|
|
inclusionName = tr("inclusion");
|
|
break;
|
|
case 0:
|
|
inclusionName = tr("exclusion");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
QTableWidgetItem *item3 = new QTableWidgetItem(inclusionName);
|
|
item3->setCheckState((inclusion)?(Qt::Checked):(Qt::Unchecked));
|
|
|
|
widget->removeCellWidget(endIndex - 1,3);
|
|
widget->setItem(endIndex - 1,3,item3);
|
|
|
|
//widget->removeCellWidget(endIndex - 1,4);
|
|
//widget->setItem(endIndex - 1,4,new QTableWidgetItem(QString::number(count)));
|
|
|
|
widget->removeCellWidget(endIndex - 1,5);
|
|
widget->setItem(endIndex - 1,5,new QTableWidgetItem(QString::number(lat ,'f',7)));
|
|
|
|
widget->removeCellWidget(endIndex - 1,6);
|
|
widget->setItem(endIndex - 1,6,new QTableWidgetItem(QString::number(lng ,'f',7)));
|
|
}
|
|
|
|
|
|
//重新更新一下count
|
|
int len = widget->rowSpan(row,0);
|
|
int sIndex = startIndex;
|
|
for(int i = 1;i<=len;i++)
|
|
{
|
|
widget->removeCellWidget(sIndex,4);
|
|
widget->setItem(sIndex++,4,new QTableWidgetItem(QString::number(i)));
|
|
}
|
|
|
|
|
|
}
|
|
else if(newVertex < oldVertex)//减少
|
|
{
|
|
qDebug() << "del" << endIndex;
|
|
for(int i = 0;i<(oldVertex - newVertex);i++)
|
|
{
|
|
widget->removeRow(endIndex - i);
|
|
|
|
qDebug() << "idx" << endIndex - i;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
|
|
int gidx = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
//找到开始的idx
|
|
int StartIdx = widget->item(row,0)->row();
|
|
for (int i = 0; i < widget->rowCount(); ++i) {
|
|
if(widget->item(i,0)->data(Qt::DisplayRole).toInt() == gidx)
|
|
{
|
|
StartIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SpanCount = widget->rowSpan(row,0);
|
|
|
|
QString type = widget->item(StartIdx,1)->data(Qt::DisplayRole).toString();//得到type
|
|
qreal par = widget->item(StartIdx,2)->data(Qt::DisplayRole).toDouble();//得到par
|
|
bool inclusion = widget->item(StartIdx,3)->checkState()?(true):(false);
|
|
|
|
|
|
//从头获取所有点
|
|
QList<QPointF> latlng;
|
|
latlng.clear();
|
|
|
|
for(int i = StartIdx;i<(StartIdx + SpanCount);i++)
|
|
{
|
|
qreal latitude = widget->item(i,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(i,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
latlng.push_back(QPointF(latitude,longitude));
|
|
}
|
|
|
|
emit setFencePolygon(gidx,par,inclusion,latlng);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else if(column == 3)
|
|
{
|
|
if(item->checkState() == Qt::Checked)//包含
|
|
{
|
|
QString inclusionName = tr("inclusion");
|
|
item->setText(inclusionName);
|
|
}
|
|
else//不包含
|
|
{
|
|
QString inclusionName = tr("exclusion");
|
|
item->setText(inclusionName);
|
|
}
|
|
|
|
int gidx = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
//找到开始的idx
|
|
int StartIdx = widget->item(row,0)->row();
|
|
for (int i = 0; i < widget->rowCount(); ++i) {
|
|
if(widget->item(i,0)->data(Qt::DisplayRole).toInt() == gidx)
|
|
{
|
|
StartIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SpanCount = widget->rowSpan(row,0);
|
|
|
|
QString type = widget->item(StartIdx,1)->data(Qt::DisplayRole).toString();//得到type
|
|
qreal par = widget->item(StartIdx,2)->data(Qt::DisplayRole).toDouble();//得到par
|
|
bool inclusion = widget->item(StartIdx,3)->checkState()?(true):(false);
|
|
|
|
if(type == tr("Circle"))
|
|
{
|
|
qreal latitude = widget->item(row,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(row,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
emit setFenceCircle(gidx,par,inclusion,latitude,longitude);//修改圆形
|
|
|
|
}
|
|
else if(type == tr("Polygon"))
|
|
{
|
|
//从头获取所有点
|
|
QList<QPointF> latlng;
|
|
latlng.clear();
|
|
|
|
for(int i = StartIdx;i<(StartIdx + SpanCount);i++)
|
|
{
|
|
qreal latitude = widget->item(i,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(i,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
latlng.push_back(QPointF(latitude,longitude));
|
|
}
|
|
|
|
emit setFencePolygon(gidx,par,inclusion,latlng);
|
|
}
|
|
|
|
}
|
|
else if(column == 5)
|
|
{
|
|
QLineEdit *line = new QLineEdit(widget);
|
|
line->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
line->setText(item->data(Qt::DisplayRole).toString());
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,line);
|
|
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
item->setText(str);
|
|
}
|
|
|
|
int gidx = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
//找到开始的idx
|
|
int StartIdx = widget->item(row,0)->row();
|
|
for (int i = 0; i < widget->rowCount(); ++i) {
|
|
if(widget->item(i,0)->data(Qt::DisplayRole).toInt() == gidx)
|
|
{
|
|
StartIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SpanCount = widget->rowSpan(row,0);
|
|
|
|
QString type = widget->item(StartIdx,1)->data(Qt::DisplayRole).toString();//得到type
|
|
qreal par = widget->item(StartIdx,2)->data(Qt::DisplayRole).toDouble();//得到par
|
|
bool inclusion = widget->item(StartIdx,3)->checkState()?(true):(false);
|
|
|
|
if(type == tr("Circle"))
|
|
{
|
|
qreal latitude = widget->item(row,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(row,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
emit setFenceCircle(gidx,par,inclusion,latitude,longitude);//修改圆形
|
|
|
|
}
|
|
else if(type == tr("Polygon"))
|
|
{
|
|
//从头获取所有点
|
|
QList<QPointF> latlng;
|
|
latlng.clear();
|
|
|
|
for(int i = StartIdx;i<(StartIdx + SpanCount);i++)
|
|
{
|
|
qreal latitude = widget->item(i,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(i,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
latlng.push_back(QPointF(latitude,longitude));
|
|
}
|
|
|
|
emit setFencePolygon(gidx,par,inclusion,latlng);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
else if(column == 6)
|
|
{
|
|
QLineEdit *line = new QLineEdit(widget);
|
|
line->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
line->setText(item->data(Qt::DisplayRole).toString());
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,line);
|
|
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
item->setText(str);
|
|
}
|
|
|
|
|
|
int gidx = widget->item(row,0)->data(Qt::DisplayRole).toInt();//得到group
|
|
//找到开始的idx
|
|
int StartIdx = widget->item(row,0)->row();
|
|
for (int i = 0; i < widget->rowCount(); ++i) {
|
|
if(widget->item(i,0)->data(Qt::DisplayRole).toInt() == gidx)
|
|
{
|
|
StartIdx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SpanCount = widget->rowSpan(row,0);
|
|
|
|
QString type = widget->item(StartIdx,1)->data(Qt::DisplayRole).toString();//得到type
|
|
qreal par = widget->item(StartIdx,2)->data(Qt::DisplayRole).toDouble();//得到par
|
|
bool inclusion = widget->item(StartIdx,3)->checkState()?(true):(false);
|
|
|
|
if(type == tr("Circle"))
|
|
{
|
|
qreal latitude = widget->item(row,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(row,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
emit setFenceCircle(gidx,par,inclusion,latitude,longitude);//修改圆形
|
|
|
|
}
|
|
else if(type == tr("Polygon"))
|
|
{
|
|
//从头获取所有点
|
|
QList<QPointF> latlng;
|
|
latlng.clear();
|
|
|
|
for(int i = StartIdx;i<(StartIdx + SpanCount);i++)
|
|
{
|
|
qreal latitude = widget->item(i,5)->data(Qt::DisplayRole).toDouble();
|
|
qreal longitude = widget->item(i,6)->data(Qt::DisplayRole).toDouble();
|
|
|
|
latlng.push_back(QPointF(latitude,longitude));
|
|
}
|
|
|
|
emit setFencePolygon(gidx,par,inclusion,latlng);
|
|
}
|
|
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//emit waypointSelect(group,idx);//切换过去
|
|
|
|
if((column == 1)||(column == 2))//如果是第一个或者第二个,那么有操作
|
|
{
|
|
QVariant itemValue = item->data(Qt::DisplayRole);
|
|
|
|
bool ok = false;
|
|
qreal realValue = itemValue.toDouble(&ok);
|
|
|
|
if(ok)//能够转成数字
|
|
{
|
|
if(column == 2)
|
|
{
|
|
QLineEdit *line = new QLineEdit(widget);
|
|
line->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
line->setText(itemValue.toString());
|
|
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,line);
|
|
|
|
opwidget = widget;
|
|
opitem = item;
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam1(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else//不能转成数字
|
|
{
|
|
if(column == 1)
|
|
{
|
|
QComboBox *combox = new QComboBox(widget);
|
|
combox->addItem(tr("航点"),16);
|
|
combox->addItem(tr("返航"),20);
|
|
combox->addItem(tr("降落"),21);
|
|
combox->addItem(tr("起飞"),22);
|
|
combox->setCurrentIndex(combox->findText(itemValue.toString()));
|
|
combox->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,combox);
|
|
|
|
connect(combox,&QComboBox::currentTextChanged,[=]{
|
|
QString str = combox->currentText();
|
|
widget->removeCellWidget(row,column);
|
|
emit setCommand(str);//直接修改底层,让底层返回数据更新到界面
|
|
});
|
|
|
|
connect(combox,&QComboBox::editTextChanged,[=]{
|
|
QString str = combox->currentText();
|
|
widget->removeCellWidget(row,column);
|
|
emit setCommand(str);//直接修改底层,让底层返回数据更新到界面
|
|
});
|
|
}
|
|
else if(column == 2)
|
|
{
|
|
QComboBox *combox = new QComboBox(widget);
|
|
combox->addItem(tr("保持"),0);
|
|
combox->addItem(tr("表速"),-1);
|
|
combox->addItem(tr("快升"),-2);
|
|
combox->addItem(tr("开加力"),-3);
|
|
combox->addItem(tr("关加力"),-4);
|
|
combox->setCurrentIndex(combox->findText(itemValue.toString()));
|
|
combox->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,combox);
|
|
|
|
connect(combox,&QComboBox::currentTextChanged,[=]{
|
|
QString str = combox->currentText();
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam1(str);
|
|
});
|
|
}
|
|
}
|
|
|
|
qDebug() << "clicked" << row << column << itemValue << ok;
|
|
}
|
|
else//后面的参数,应该都是数字
|
|
{
|
|
if(column == 0)//第一个不能编辑
|
|
{
|
|
return;
|
|
}
|
|
|
|
QVariant itemValue = item->data(Qt::DisplayRole);
|
|
|
|
bool ok = false;
|
|
qreal realValue = itemValue.toDouble(&ok);
|
|
|
|
if(ok)//能够转成数字
|
|
{
|
|
QLineEdit *line = new QLineEdit(widget);
|
|
line->setStyleSheet("background-color: #FFFFFF;font :15px 黑体;");
|
|
line->setText(itemValue.toString());
|
|
widget->removeCellWidget(row,column);
|
|
widget->setCellWidget(row,column,line);
|
|
|
|
opwidget = widget;
|
|
opitem = item;
|
|
|
|
if(column == 3)
|
|
{
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam2(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
else if(column == 4)
|
|
{
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam3(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
else if(column == 5)
|
|
{
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam4(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
else if(column == 6)
|
|
{
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam5(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
else if(column == 7)
|
|
{
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam6(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
else if(column == 8)
|
|
{
|
|
connect(line,&QLineEdit::editingFinished,[=](){
|
|
if(line)
|
|
{
|
|
QString str = line->text();
|
|
bool ok = false;
|
|
str.toDouble(&ok);
|
|
if(ok)
|
|
{
|
|
widget->removeCellWidget(row,column);
|
|
emit setParam7(str);//能够正常转换成数字再修改
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
else//不能转成数字
|
|
{
|
|
qDebug() << "input error";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|