#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); }