Files
gcs-nf/App/mainwindow.cpp
T
2020-04-03 09:39:31 +08:00

391 lines
8.6 KiB
C++

#include "mainwindow.h"
#include "QPushButton"
#include "QAction"
#include "QHBoxLayout"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//ui initial
linkui = new LinkUI(this);
linkui->hide();
inspectui = new InspectUI(this);
inspectui->hide();
toolsui = new ToolsUI(this);
toolsui->hide();
about = new About();
about->hide();
help = new Help();
help->hide();
setting = new Setting();
setting->hide();
dlink = new DLink();
/*
connect(dlink->mavlinknode,&MavLinkNode::state_updated,
this,&MainWindow::updateUI);
*/
connect(dlink->mavlinknode,SIGNAL(state_updated()),
this,SLOT(updateUI()));
map = new mapcontrol::OPMapWidget(this);
map->SetShowHome(false);
map->SetShowCompass(false);
map->SetUseOpenGL(true);
//QString maptype = myinifile->ReadIni("FGCS.ini","Map","Type");
map->SetMapType(mapcontrol::Helper::MapTypeFromString("BingSatellite"));
map->setGeometry(0,
0,
this->width(),
this->height());
QIcon icon;
nav = new QNavigationWidget(this);
nav->setGeometry(0,0,50,this->height());
nav->setRowHeight(50);
nav->addItem(tr("Flight"),icon);
nav->addItem(tr("Mission"),icon);//mission
nav->addItem(tr("Communication"),icon);//all link
nav->addItem(tr("Inspector"),icon);// mavlink param
nav->addItem(tr("Command"),icon);//cmd console
nav->addItem(tr("Data"),icon);//all data
nav->addItem(tr("Tools"),icon);//soft setting help about
connect(nav,SIGNAL(ItemChanged(int)),
this,SLOT(onTabIndexChanged(int)));
copk = new Cockpit(this);
copk->setGeometry(this->width() - copk->width(),0,300,340);
updateTimer = new QTimer();
connect(updateTimer,&QTimer::timeout,
this,&MainWindow::updateUI);
updateTimer->start(200);
//=======信号和槽========
connect(linkui,&LinkUI::clicked,
this,&MainWindow::subui);
connect(inspectui,&InspectUI::clicked,
this,&MainWindow::subui);
connect(toolsui,&ToolsUI::clicked,
this,&MainWindow::subui);
}
MainWindow::~MainWindow()
{
map->close();
delete map;
copk->deleteLater();
delete copk;
QCoreApplication::quit();//退出所有窗口
}
void MainWindow::closeEvent(QCloseEvent *event)
{
event->accept();
QCoreApplication::quit();//退出所有
}
void MainWindow::resizeEvent(QResizeEvent *event)
{
Q_UNUSED(event);
map->setGeometry(0,
0,
this->width(),
this->height());
nav->setGeometry(0,0,nav->width(),this->height());
copk->setGeometry(this->width() - copk->width(),0,copk->width(),copk->height());
}
void MainWindow::keyPressEvent(QKeyEvent *event) //键盘按下事件
{
//qDebug() << event;
switch(event->key())
{
case Qt::Key_A:
break;
case Qt::Key_D:
if(event->modifiers() == Qt::AltModifier)
{
qInfo() << "alt + D";
dlink->mavlinknode->Mission->ReadCmd(1,1);
}
break;
case Qt::Key_U :
{
if(event->modifiers() == Qt::AltModifier)
{
qInfo() << "atl + U";
//dlink->Mavlink_msg_mission_count(map->WPTotal());
//qDebug() << map->WPTotal();
}
}break;
case Qt::Key_P :
{
if(event->modifiers() == Qt::AltModifier)
{//下载参数
qInfo() << "atl + P";
dlink->mavlinknode->Parameter->ReadCmd(1,1,1);
}
}break;
case Qt::Key_O :
{
if(event->modifiers() == Qt::AltModifier)
{//上传参数
qInfo() << "atl + O";
//dlink->Mavlink_msg_mission_count(map->WPTotal());
}
}break;
case Qt::Key_S:
break;
case Qt::Key_W:
break;
case Qt::Key_K :
{
if(event->modifiers() == Qt::ControlModifier)
{
}
}
break;
case Qt::Key_Space :
{
internals::PointLatLng LatLng;
//LatLng.SetLat(dlink->v*1e-7);
//LatLng.SetLng(dlink->vehicle.gps_raw_int.lon*1e-7);
map->SetCurrentPosition(LatLng);
}
break;
case Qt::Key_Equal :
{
if(event->modifiers() == Qt::ShiftModifier)
{
//map->WPFind(rechcount)->SetReached(true);
}
else
{
map->SetZoom(map->ZoomReal() + 1);
}
}
break;
case Qt::Key_Plus :
{
if(event->modifiers() == Qt::ShiftModifier)
{
//map->WPFind(rechcount)->SetReached(true);
//rechcount++;
//qDebug() << rechcount;
}
}
break;
case Qt::Key_Minus:
{
if(event->modifiers() == Qt::ShiftModifier)
{
//map->WPFind(rechcount)->SetReached(true);
//rechcount--;
//qDebug() << rechcount;
}
else
{
map->SetZoom(map->ZoomReal() - 1);
}
}
break;
case Qt::Key_C:
{
if(event->modifiers() == Qt::AltModifier)
{
map->UAV->DeleteTrail();
}
}
break;
}
}
void MainWindow::subui(QString arg)//子界面管理
{
if(arg == tr("SerialPort"))
{
dlink_triggered();
}
else if(arg == tr("UDP"))
{
client_triggered();
}
else if(arg == tr("Mavlink"))
{
dlink->mavlinknode->mavlinkinspector->show();
}
else if(arg == tr("Parameter"))
{
dlink->mavlinknode->Parameter->paramInspect->show();
}
else if(arg == tr("About"))
{
about->show();
}
else if(arg == tr("Setting"))
{
setting->show();
}
else if(arg == tr("Help"))
{
help->show();
}
}
void MainWindow::onTabIndexChanged(const int &index)//界面选择管理
{
if((index == 0)||(index == 1))//隐藏
{
map->show();
copk->show();
}
else
{
map->hide();
copk->hide();
}
if(index == 2) linkui->show();
else linkui->hide();
if(index == 3) inspectui->show();
else inspectui->hide();
if(index == 4)
{
qDebug() << "index:" << index;
}
else
{
}
if(index == 5)
{
qDebug() << "index:" << index;
}
else
{
}
if(index == 6) toolsui->show();
else toolsui->hide();
}
void MainWindow::dlink_triggered()
{
if(dlink->statesPort())
{
disconnectdialog dlg(this);
dlg.setWindowTitle(tr("SerialPort"));
dlg.setWindowIcon(QIcon(":/images/LinkUI/SerialPort.ico"));
int ret = dlg.exec();
if (QDialog::Accepted == ret)
{
dlink->stopPort();
}
}
else
{
ConnectDialog dlg(this);
dlg.setWindowTitle(tr("SerialPort"));
dlg.setWindowIcon(QIcon(":/images/LinkUI/SerialPort.ico"));
dlg.baudrate = 115200;
dlg.parity = QSerialPort::NoParity;
int ret = dlg.exec();
if (QDialog::Accepted == ret)
{
dlink->setupPort(dlg.port, dlg.baudrate,dlg.parity);
}
}
}
void MainWindow::client_triggered()
{
ClientLinkDialog dlg(this);
dlg.setWindowTitle(tr("ClientLink"));
dlg.setWindowIcon(QIcon(":/images/LinkUI/Client.ico"));
int ret = dlg.exec();
if (QDialog::Accepted == ret)
{
dlink->setupClient(dlg.remote_addr,dlg.remote_port,dlg.local_port);
}
}
void MainWindow::updateUI()//事件驱动式更新数据
{
copk->setAttitude(dlink->mavlinknode->vehicle.attitude.pitch * 57.3,
dlink->mavlinknode->vehicle.attitude.roll * 57.3,
dlink->mavlinknode->vehicle.attitude.yaw * 57.3);
copk->setAltitude(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-3 );
copk->setAirSpeed(dlink->mavlinknode->vehicle.airspeed_autocal.vx);
}