391 lines
8.6 KiB
C++
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);
|
|
|
|
}
|
|
|
|
|
|
|