Files
gcs-nf/App/MissionUI/MissionUI.cpp
T

305 lines
8.2 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"));
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)
{
table->setColumnCount(9); //设置列数为7
table->setGeometry(QRect(10,455,740,95)); //设置tableWidget的大小
table->setSelectionBehavior(QAbstractItemView::SelectRows);//设置选中模式为选中行
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,100); //设置第九列的列宽(alt)
table->setHorizontalHeaderLabels(QStringList() <<tr("number")<<tr("command")<<tr("par1")<<tr("par2")<<tr("par3")<<tr("par4")<<tr("lat")<<tr("lng")<<tr("alt"));
table->setFont(QFont("黑体",12,3)); //设置字体
QHeaderView* V_headerView = table->verticalHeader();
V_headerView->setHidden(true); //行名隐藏
QHeaderView* H_headerView = table->horizontalHeader();
H_headerView->setStretchLastSection(true);
H_headerView->setDefaultAlignment(Qt::AlignLeft); //表头信息显示居中靠左
connect(table,&QTableWidget::itemSelectionChanged,
this,&MissionUI::itemSelectionChanged);
}
}
}
MissionUI::~MissionUI()
{
delete ui;
}
void MissionUI::closeEvent(QCloseEvent *event)
{
event->ignore();
this->setHidden(true);
}
void MissionUI::resizeEvent(QResizeEvent *event)
{
}
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;
}
}
}
qDebug() << "find QTableWidget" << mission_type << tablelist.value(mission_type);
int idx = seq -1;
tableWidget->setRowCount(tableWidget->rowCount()+1); //设置行数+1
tableWidget->setItem(idx,0,new QTableWidgetItem(QString::number(seq))); //第一列的内容设置为index
qDebug() << "pointCreate seq" << seq;
QComboBox *cmdBox = new QComboBox;
cmdBox->addItem(tr("waypoint"),16);
cmdBox->addItem(tr("return"),20);
cmdBox->addItem(tr("landing"),21);
cmdBox->addItem(tr("takeoff"),22);
cmdBox->setCurrentIndex(cmdBox->findData(command));
tableWidget->setCellWidget(idx,1,cmdBox);
if(command == 16)
{
QComboBox *par1Box = new QComboBox;
par1Box->addItem(tr("保持"),0);
par1Box->addItem(tr("表速"),-1);
par1Box->addItem(tr("快升"),-2);
par1Box->addItem(tr("开加力"),-3);
par1Box->addItem(tr("关加力"),-4);
par1Box->setCurrentIndex(par1Box->findData(param1));
tableWidget->setCellWidget(idx,2,par1Box);
}
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->setItem(idx,3,new QTableWidgetItem(QString::number(param2)));
tableWidget->setItem(idx,4,new QTableWidgetItem(QString::number(param3)));
tableWidget->setItem(idx,5,new QTableWidgetItem(QString::number(param4)));
tableWidget->setItem(idx,6,new QTableWidgetItem(QString::number(x * 10e-8,'f',7)));
tableWidget->setItem(idx,7,new QTableWidgetItem(QString::number(y * 10e-8,'f',7)));
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);
}
}
for (int i = 0;i<tableWidget->rowCount();i++)
{
QTableWidgetItem* pItem = tableWidget->item(i, 0);
if(pItem)
pItem->setFlags(pItem->flags() & (~Qt::ItemIsEditable));
}
}
void MissionUI::pointDelete(int idx)
{
/*
if(tableWidget->rowAt(idx) != -1)
{
tableWidget->removeRow(idx); //删除掉了表格信息
}
*/
}
void MissionUI::on_tableWidget_3_itemChanged(QTableWidgetItem *item)
{
qDebug() << item->data(Qt::DisplayRole);
QTableWidget *widget = qobject_cast<QTableWidget *>(sender());
int group = tablelist.key(widget);
}
void MissionUI::on_tabWidget_currentChanged(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;
}
emit groupChanged(group);
}
void MissionUI::on_pushButton_load_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);
}
}
void MissionUI::on_pushButton_save_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);
}
}
void MissionUI::on_pushButton_upload_clicked()
{
emit WPUpload();
}
void MissionUI::on_pushButton_download_clicked()
{
emit WPDownload();
}
void MissionUI::on_pushButton_insert_clicked()
{
emit WPInsert();
}
void MissionUI::on_pushButton_delete_clicked()
{
emit WPDelete();
}
void MissionUI::on_pushButton_add_clicked()
{
emit WPAdd();
}
void MissionUI::on_pushButton_clean_clicked()
{
emit WPDeleteAll();
}
void MissionUI::itemSelectionChanged()
{
QTableWidget *widget = qobject_cast<QTableWidget *>(sender());
int group = tablelist.key(widget);
int idx = widget->currentRow() + 1;
qDebug() << "group" << "index" << group << idx;
emit waypointSelect(group,idx);
}