add heading target
This commit is contained in:
+1
-1
@@ -93,7 +93,7 @@ void MainWindow::resizeEvent(QResizeEvent *e)
|
||||
|
||||
nav->setGeometry(0,0,50,this->height());
|
||||
|
||||
copk->setGeometry(this->width() - copk->width(),0,copk->width(),copk->height());
|
||||
copk->setGeometry(this->width() - copk->width(),0,copk->width(),this->height());
|
||||
|
||||
map->setGeometry(nav->width(),
|
||||
0,
|
||||
|
||||
+183
-132
@@ -70,8 +70,33 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
|
||||
//qDebug() << "here";
|
||||
|
||||
|
||||
//初始化完成后打开定时器开始计数刷新
|
||||
UpdateTimer = new QTimer;
|
||||
|
||||
connect(UpdateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(UpdateTimeout()));
|
||||
|
||||
UpdateTimer->start(1000);
|
||||
|
||||
}
|
||||
|
||||
Cockpit::~Cockpit()
|
||||
{
|
||||
if(UpdateTimer->isActive())
|
||||
{
|
||||
UpdateTimer->stop();
|
||||
UpdateTimer->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::UpdateTimeout(void)
|
||||
{
|
||||
//qDebug() << "time out";
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Cockpit::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
@@ -107,12 +132,15 @@ void Cockpit::wheelEvent(QWheelEvent *e)
|
||||
setYaw(m_Attitude.yaw +0.1f * e->angleDelta().y()/120.0f);
|
||||
|
||||
setAirSpeed(m_Attitude.airspeed +0.1f * e->angleDelta().y()/120.0f);
|
||||
setGPSAltitude(m_GPS.altitude + e->angleDelta().y()/120.0f);
|
||||
setGPSAltitude(m_GPS.altitude + 0.2f * e->angleDelta().y()/120.0f);
|
||||
|
||||
m_Target.altitude = 60;
|
||||
|
||||
m_Target.airspeed = 20;//0.1f * e->angleDelta().y()/120.0f;
|
||||
|
||||
|
||||
m_Target.yaw += 0.2f * e->angleDelta().y()/120.0f;
|
||||
|
||||
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch << m_Attitude.yaw << m_Target.airspeed;
|
||||
|
||||
update();
|
||||
@@ -246,9 +274,12 @@ void Cockpit::paintEvent(QPaintEvent *)
|
||||
drawPitch(&painter);
|
||||
drawRoll(&painter);
|
||||
drawRollScale(&painter);
|
||||
drawYawScale(&painter);
|
||||
|
||||
drawLeftScale(&painter);
|
||||
drawRightScale(&painter);
|
||||
|
||||
drawYawScale(&painter);
|
||||
|
||||
//drawCenterLine(&painter);
|
||||
//drawText(&painter);
|
||||
//drawGPS(&painter);
|
||||
@@ -480,135 +511,6 @@ void Cockpit::drawRollScale(QPainter *painter)
|
||||
painter->restore();
|
||||
|
||||
}
|
||||
//画航向(位于底部的一个圈)
|
||||
void Cockpit::drawYawScale(QPainter *painter)
|
||||
{
|
||||
|
||||
painter->save();
|
||||
|
||||
QPen ePen;
|
||||
QFont font;
|
||||
//平移坐标
|
||||
painter->translate(0,950);
|
||||
|
||||
painter->save();
|
||||
//画一个半透明的基础圆
|
||||
painter->setOpacity(0.3f);
|
||||
ePen.setColor(QColor("#7A7A7A"));
|
||||
painter->setBrush(QColor("#7A7A7A"));
|
||||
painter->drawEllipse(-500,-500,1000,1000);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
//画一个顶部三角形
|
||||
//painter->setOpacity(1.0f);
|
||||
|
||||
static const QPointF Tranpoints[3] = {
|
||||
QPointF(-30,-560),
|
||||
QPointF(0,-500),
|
||||
QPointF(30,-560)
|
||||
};
|
||||
|
||||
ePen.setWidth(1);
|
||||
ePen.setColor(m_CurrentColor);
|
||||
painter->setPen(ePen);
|
||||
painter->setBrush(m_CurrentColor);
|
||||
painter->drawPolygon(Tranpoints,3);
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画一个顶部黑色显示框
|
||||
painter->save();
|
||||
|
||||
static const QPointF Rectpoints[4] = {
|
||||
QPointF(-90,-610),
|
||||
QPointF( 90,-610),
|
||||
QPointF( 90, -540),
|
||||
QPointF(-90, -540),
|
||||
};
|
||||
|
||||
ePen.setWidth(1);
|
||||
ePen.setColor(Qt::black);
|
||||
painter->setPen(ePen);
|
||||
painter->setBrush(Qt::black);
|
||||
painter->drawPolygon(Rectpoints,4);
|
||||
|
||||
ePen.setColor(m_CurrentColor);
|
||||
font.setPointSize(60);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(-90,-610,180,60),Qt::AlignVCenter|Qt::AlignHCenter,QString::number(m_Attitude.yaw,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
|
||||
ePen.setColor(m_CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
|
||||
font.setPointSize(60);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
//旋转
|
||||
painter->rotate(-m_Attitude.yaw);
|
||||
//画刻度
|
||||
|
||||
for(int i=0;i<72;i++)
|
||||
{
|
||||
painter->save();
|
||||
|
||||
painter->setOpacity(1.0f);
|
||||
|
||||
painter->translate(0,0);
|
||||
painter->rotate(i * 5.0f);
|
||||
if((i%2) == 0)
|
||||
painter->drawLine(0,-500,0,-460);
|
||||
else
|
||||
painter->drawLine(0,-500,0,-480);
|
||||
|
||||
if((i%6) == 0)
|
||||
{
|
||||
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
|
||||
{
|
||||
switch (i) {
|
||||
case 0:
|
||||
painter->drawText( -20,-380, "N");
|
||||
break;
|
||||
case 18:
|
||||
painter->drawText( -20,-380, "E");
|
||||
break;
|
||||
case 36:
|
||||
painter->drawText( -20,-380, "S");
|
||||
break;
|
||||
case 54:
|
||||
painter->drawText( -20,-380, "W");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
QString strText = QString::number(qAbs(i/2));
|
||||
if(strText.length() > 1)
|
||||
{
|
||||
painter->drawText( -40,-380, strText);
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->drawText( -20,-380, strText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::drawLeftScale(QPainter *painter)
|
||||
@@ -988,7 +890,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawRect(0,600,400,100);
|
||||
painter->drawRect(0,600,300,100);
|
||||
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_GPS.altitude));
|
||||
|
||||
@@ -1221,5 +1123,154 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
}
|
||||
|
||||
//画航向(位于底部的一个圈)
|
||||
void Cockpit::drawYawScale(QPainter *painter)
|
||||
{
|
||||
|
||||
painter->save();
|
||||
|
||||
QPen ePen;
|
||||
QFont font;
|
||||
//平移坐标
|
||||
painter->translate(0,1000);
|
||||
|
||||
painter->save();
|
||||
//画一个半透明的基础圆
|
||||
painter->setOpacity(0.3f);
|
||||
ePen.setColor(QColor("#7A7A7A"));
|
||||
painter->setBrush(QColor("#7A7A7A"));
|
||||
painter->drawEllipse(-500,-500,1000,1000);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
//画一个顶部三角形
|
||||
//painter->setOpacity(1.0f);
|
||||
|
||||
static const QPointF Tranpoints[3] = {
|
||||
QPointF(-30,-560),
|
||||
QPointF(0,-500),
|
||||
QPointF(30,-560)
|
||||
};
|
||||
|
||||
ePen.setWidth(1);
|
||||
ePen.setColor(m_CurrentColor);
|
||||
painter->setPen(ePen);
|
||||
painter->setBrush(m_CurrentColor);
|
||||
painter->drawPolygon(Tranpoints,3);
|
||||
|
||||
painter->restore();
|
||||
|
||||
//画顶部紫色目标值
|
||||
painter->save();
|
||||
//旋转
|
||||
painter->rotate(m_Target.yaw - m_Attitude.yaw);
|
||||
|
||||
static const QPointF Tarpoint[3] = {
|
||||
QPointF(-30,-560),
|
||||
QPointF(0,-500),
|
||||
QPointF(30,-560)
|
||||
};
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_TargetColor);
|
||||
painter->setPen(ePen);
|
||||
painter->drawPolygon(Tarpoint,3);
|
||||
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
|
||||
//画一个顶部黑色显示框
|
||||
painter->save();
|
||||
|
||||
static const QPointF Rectpoints[4] = {
|
||||
QPointF(-90,-610),
|
||||
QPointF( 90,-610),
|
||||
QPointF( 90, -540),
|
||||
QPointF(-90, -540),
|
||||
};
|
||||
|
||||
ePen.setWidth(1);
|
||||
ePen.setColor(Qt::black);
|
||||
painter->setPen(ePen);
|
||||
painter->setBrush(Qt::black);
|
||||
painter->drawPolygon(Rectpoints,4);
|
||||
|
||||
ePen.setColor(m_CurrentColor);
|
||||
font.setPointSize(60);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(-90,-610,180,60),Qt::AlignVCenter|Qt::AlignHCenter,QString::number(m_Attitude.yaw,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
|
||||
ePen.setColor(m_CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
|
||||
font.setPointSize(60);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
//旋转
|
||||
painter->rotate(-m_Attitude.yaw);
|
||||
//画刻度
|
||||
|
||||
for(int i=0;i<72;i++)
|
||||
{
|
||||
painter->save();
|
||||
|
||||
painter->setOpacity(1.0f);
|
||||
|
||||
painter->translate(0,0);
|
||||
painter->rotate(i * 5.0f);
|
||||
if((i%2) == 0)
|
||||
painter->drawLine(0,-500,0,-460);
|
||||
else
|
||||
painter->drawLine(0,-500,0,-480);
|
||||
|
||||
if((i%6) == 0)
|
||||
{
|
||||
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
|
||||
{
|
||||
switch (i) {
|
||||
case 0:
|
||||
painter->drawText( -20,-380, "N");
|
||||
break;
|
||||
case 18:
|
||||
painter->drawText( -20,-380, "E");
|
||||
break;
|
||||
case 36:
|
||||
painter->drawText( -20,-380, "S");
|
||||
break;
|
||||
case 54:
|
||||
painter->drawText( -20,-380, "W");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
QString strText = QString::number(qAbs(i/2));
|
||||
if(strText.length() > 1)
|
||||
{
|
||||
painter->drawText( -40,-380, strText);
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->drawText( -20,-380, strText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
|
||||
|
||||
+12
-1
@@ -6,6 +6,8 @@
|
||||
|
||||
#include "leftladder.h"
|
||||
|
||||
#include "QTimer"
|
||||
|
||||
|
||||
class QColor;
|
||||
|
||||
@@ -16,7 +18,7 @@ public:
|
||||
enum ErrorCode {MaxValueError=1,MinValueError,ThresholdError,TargetError,PrecisionError,ColorError,UnitsEmpty,OutOfRange};
|
||||
|
||||
explicit Cockpit(QWidget *parent = 0);
|
||||
|
||||
~Cockpit();
|
||||
|
||||
|
||||
typedef struct {
|
||||
@@ -139,9 +141,18 @@ protected:
|
||||
|
||||
void drawLowPanel(QPainter *painter);
|
||||
|
||||
private slots:
|
||||
|
||||
void UpdateTimeout(void);
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
QTimer *UpdateTimer = nullptr;
|
||||
|
||||
|
||||
QString m_mode;//显示模式
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user