fix the tar state

This commit is contained in:
2020-01-10 15:53:42 +08:00
parent 1b466f703e
commit 5a1fe51da3
4 changed files with 290 additions and 271 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ MainWindow::MainWindow(QWidget *parent)
copk = new Cockpit(this);
copk->setGeometry(this->width() - copk->width(),0,1000,this->height());
copk->setGeometry(this->width() - copk->width(),0,600,this->height());
nav->setGeometry(0,0,50,this->height());
+288 -269
View File
@@ -109,6 +109,7 @@ void Cockpit::wheelEvent(QWheelEvent *e)
setAirSpeed(m_Attitude.airspeed +0.1f * e->angleDelta().y()/120.0f);
setGPSAltitude(m_GPS.altitude + e->angleDelta().y()/120.0f);
m_Target.altitude = 60;
m_Target.airspeed = 20;//0.1f * e->angleDelta().y()/120.0f;
@@ -315,7 +316,6 @@ void Cockpit::drawPitch(QPainter *painter)
ePen.setColor(m_CentreLineColor);
ePen.setWidth(8);
font.setPointSize(50);
//font.setWeight(QFont::ExtraLight);
font.setFamily("Arial");//非衬线
painter->setPen(ePen);
@@ -629,21 +629,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
painter->drawRect(0,-600,300,1200);
painter->restore();
//画最底下的黑色单位显示框
painter->save();
ePen.setColor(QColor("#FFFFFF"));
ePen.setWidth(8);
font.setPixelSize(60);
painter->setPen(ePen);
painter->setFont(font);
painter->setBrush(QColor("#000000"));
painter->drawRect(0,600,300,100);
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"TAS " + QString::number(m_Attitude.airspeed,'f',0));
painter->restore();
//画旁边的速度刻度,并显示
@@ -732,25 +718,6 @@ void Cockpit::drawLeftScale(QPainter *painter)
//画 中间黑色的显示块
painter->save();
/*
static const QPointF points1[11] = {
QPointF( 0,-50),
QPointF(200,-50),
QPointF(200,-125),
QPointF(275,-125),
QPointF(275,-25),
QPointF(290, 0),
QPointF(275, 25),
QPointF(275, 125),
QPointF(200, 125),
QPointF(200, 50),
QPointF( 0, 50)
};
*/
static const QPointF points1[7] = {
QPointF( 0,-120),
QPointF(225,-120),
@@ -852,28 +819,54 @@ void Cockpit::drawLeftScale(QPainter *painter)
//画速度目标值(紫色小箭头)
painter->save();
painter->translate(260,-1200.0f/40.0f * (m_Target.airspeed- m_Attitude.airspeed));//设置原点
ePen.setColor(m_TargetColor);
ePen.setWidth(8);
painter->setPen(ePen);
static const QPointF ASTargetpoints2[5] = {
QPointF(0, 0),
QPointF(40, -30),
QPointF(120, -30),
QPointF(120, 30),
QPointF(40, 30)
};
float t_y = -1200.0f/40.0f * (m_Target.airspeed- m_Attitude.airspeed);
painter->drawPolygon(ASTargetpoints2, 5);
t_y = (t_y < -600)?(-600):((t_y>600)?(600):(t_y));//限幅
painter->translate(260,t_y);//设置原点
if((t_y >= -600)&&(t_y <= 600))
{
static const QPointF ASTargetpoints2[5] = {
QPointF(0, 0),
QPointF(40, -30),
QPointF(120, -30),
QPointF(120, 30),
QPointF(40, 30)
};
painter->drawPolygon(ASTargetpoints2, 5);
}
painter->restore();
//给紫色的目标边框打补丁
painter->save();
painter->setBrush(Qt::black);
painter->drawRect(250,-750,150,150);
painter->setBrush(Qt::black);
painter->drawRect(250, 600,150,150);
painter->restore();
//画最底下的黑色单位显示框
painter->save();
ePen.setColor(QColor("#FFFFFF"));
ePen.setWidth(8);
font.setPixelSize(60);
painter->setPen(ePen);
painter->setFont(font);
painter->setBrush(QColor("#000000"));
painter->drawRect(0,600,300,100);
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"TAS " + QString::number(m_Attitude.airspeed,'f',0));
painter->restore();
painter->restore();
@@ -887,7 +880,7 @@ void Cockpit::drawRightScale(QPainter *painter)
painter->save();
//平移坐标
painter->translate(800,0);
painter->translate(600,0);
QPen ePen;
QFont font;
@@ -896,38 +889,15 @@ void Cockpit::drawRightScale(QPainter *painter)
painter->setOpacity(0.3f);
ePen.setColor(QColor("#7A7A7A"));
painter->setBrush(QColor("#7A7A7A"));
painter->drawRect(0,-600,400,1200);
painter->drawRect(0,-600,300,1200);
painter->restore();
//画最底下的黑色单位显示
painter->save();
ePen.setColor(QColor("#FFFFFF"));
ePen.setWidth(10);
font.setPixelSize(60);
font.setWeight(QFont::ExtraLight);
font.setFamily("Arial");//非衬线
painter->setPen(ePen);
painter->setFont(font);
painter->setBrush(QColor("#000000"));
painter->drawRect(0,600,400,100);
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_GPS.altitude));
painter->restore();
//画旁边的速度刻度,并显示
//画旁边的高度刻度,并显示
painter->save();
painter->translate(0,1200.0f/40.0f * m_GPS.altitude);
float h = 1200.0f/40.0f;//单位高度
for(int i = -19 - m_GPS.altitude;i<=(19 - m_GPS.altitude);i+=1)
{
@@ -953,46 +923,98 @@ void Cockpit::drawRightScale(QPainter *painter)
if(((i + m_GPS.altitude)* h > 130)||((i + m_GPS.altitude) * h < -130))
{
painter->drawText(QRect(80,i * h - 30,190,60),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(80,i * h - 30,220,80),Qt::AlignVCenter|Qt::AlignRight, strText);
}
}
else if((i%2) == 0)
{
painter->drawLine(0,i * h,50,i * h);
}
painter->restore();
}
painter->restore();
static const QPointF points1[11] = {
QPointF( 25,-50),
QPointF(300,-50),
QPointF(300,-125),
//画紫色框
painter->save();
static const QPointF t_h[7] = {
QPointF( 20, 0),
QPointF( -20,-30),
QPointF( -20,-125),
QPointF(100,-125),
QPointF(100, 125),
QPointF( -20, 125),
QPointF( -20, 30)
};
float h_y = -1200.0f/40.0f * (m_Target.altitude- m_GPS.altitude);
h_y = (h_y < -600)?(-600):((h_y>600)?(600):(h_y));//限幅
painter->translate(0,h_y);
ePen.setColor(m_TargetColor);
ePen.setWidth(8);
painter->setPen(ePen);
painter->drawPolygon(t_h, 7);
painter->restore();
//给紫色的目标边框打补丁
painter->save();
painter->setBrush(Qt::black);
painter->drawRect(-30,-750,150,150);
painter->setBrush(Qt::black);
painter->drawRect(-30, 600,150,150);
painter->restore();
//画最底下的黑色单位显示框
painter->save();
ePen.setColor(QColor("#FFFFFF"));
ePen.setWidth(8);
font.setPixelSize(60);
font.setWeight(QFont::ExtraLight);
font.setFamily("Arial");//非衬线
painter->setPen(ePen);
painter->setFont(font);
painter->setBrush(QColor("#000000"));
painter->drawRect(0,600,400,100);
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_GPS.altitude));
painter->restore();
//画黑色显示框
static const QPointF points1[7] = {
QPointF( 40, 0),
QPointF( 70,-30),
QPointF( 70,-125),
QPointF(420,-125),
QPointF(420, 125),
QPointF(300, 125),
QPointF(300, 50),
QPointF( 25, 50),
QPointF( 25,-25),
QPointF( 0, 0),
QPointF( 25, 25)
QPointF( 70, 125),
QPointF( 70, 30)
};
ePen.setColor(m_CentreLineColor);
ePen.setWidth(8);
painter->setPen(ePen);
painter->setBrush(QColor("#000000"));
painter->drawPolygon(points1, 11);
painter->drawPolygon(points1, 7);
@@ -1003,197 +1025,194 @@ void Cockpit::drawRightScale(QPainter *painter)
painter->setFont(font);
QString HundredText = QString::number(qAbs(int(m_GPS.altitude/100)));//设置百位以上
QString DacadeText = QString::number(int(m_GPS.altitude/10)); //设置十位
QString UnitText = QString::number(qAbs(int(m_GPS.altitude)%10)); //设置个位
if(int(m_GPS.altitude/100) > 0)
{
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, HundredText);
}
else if(int(m_GPS.altitude/100) == 0)
{
}
else if(int(m_GPS.altitude/100) < 0)
{
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight,tr("-") + HundredText);
}
QString HundredText = QString::number(qAbs(int(m_GPS.altitude/100)));//设置百位以上
QString DacadeText = QString::number(int(m_GPS.altitude/10)); //设置十位
QString UnitText = QString::number(qAbs(int(m_GPS.altitude)%10)); //设置个位
float Unit = m_GPS.altitude - int(m_GPS.altitude)/10 * 10;
float Dacade = float(int(m_GPS.altitude)%100)/10.0f;
if(int(m_GPS.altitude/100) > 0)
{
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, HundredText);
}
else if(int(m_GPS.altitude/100) == 0)
{
float Decimal = qAbs(m_GPS.altitude - int(m_GPS.altitude));
float m_Unit =qAbs(Dacade - int(Dacade));
}
else if(int(m_GPS.altitude/100) < 0)
{
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight,tr("-") + HundredText);
}
//qDebug() << Dacade << m_Unit;
//写十位
int count = 1;
float Unit = m_GPS.altitude - int(m_GPS.altitude)/10 * 10;
float Dacade = float(int(m_GPS.altitude)%100)/10.0f;
for(int i = -1.5 - Dacade;i<(1.5 - Dacade);i+=1)
{
float Decimal = qAbs(m_GPS.altitude - int(m_GPS.altitude));
float m_Unit =qAbs(Dacade - int(Dacade));
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
painter->save();
qDebug() << Dacade << m_Unit;
//写十位
int count = 1;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
font.setPointSize(70);
for(int i = -1.5 - Dacade;i<(1.5 - Dacade);i+=1)
{
painter->setPen(ePen);
painter->setFont(font);
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
painter->save();
painter->translate(300,(i + Dacade) * 120 - 60);
ePen.setColor(m_CentreLineColor);
ePen.setWidth(15);
font.setPointSize(90);
painter->setPen(ePen);
painter->setFont(font);
painter->translate(300,(i + Dacade) * 120 - 60);
//此段程序在未理解之前,请不要随意修改
switch (count) {
case 1:
if(m_Unit <= 0.5f)
{
if((60 - 120 * m_Unit) != 0)
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,60 - 120 * m_Unit ,60,60 + 120 * m_Unit ),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,60 - 120 * m_Unit ,60,60 + 120 * m_Unit ),Qt::AlignBottom|Qt::AlignLeft, strText);
painter->drawText(QRect(60,60 - 120 * m_Unit ,60,60 + 120 * m_Unit ),Qt::AlignBottom|Qt::AlignLeft, QString::number(0));
}
}
}
else //>0.5
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,120 - 120 * (m_Unit - 0.5) ,60,120 * (m_Unit - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,120 - 120 * (m_Unit - 0.5) ,60,120 * (m_Unit - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
painter->drawText(QRect(60,120 - 120 * (m_Unit - 0.5) ,60,120 * (m_Unit - 0.5)),Qt::AlignBottom|Qt::AlignLeft, QString::number(0));
}
}
break;
case 2:
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, QString::number(0));
}
break;
case 3:
if(m_Unit <= 0.5f)
{
if((60 - 120 * m_Unit) != 0)
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,60 - 120 * m_Unit),Qt::AlignTop|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,60 - 120 * m_Unit),Qt::AlignTop|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,60 - 120 * m_Unit),Qt::AlignTop|Qt::AlignLeft, QString::number(0));
}
}
else
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, QString::number(0));
}
}
}
else
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,120 - 120 * (m_Unit - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120 - 120 * (m_Unit - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,120 - 120 * (m_Unit - 0.5)),Qt::AlignTop|Qt::AlignLeft, QString::number(0));
}
}
break;
}
count++;
painter->restore();
}
//写个位
if(m_GPS.altitude < 1000)
{
count = 1;
for(int i = -1.5 - Unit;i<(1.5 - Unit);i+=1)
{
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
painter->save();
ePen.setColor(m_CentreLineColor);
ePen.setWidth(15);
font.setPointSize(90);
painter->setPen(ePen);
painter->setFont(font);
painter->translate(300,(i + Unit) * 120 - 60);
//此段程序在未理解之前,请不要随意修改
switch (count) {
case 1:
if(Decimal <= 0.5f)
{
if((60 - 120 * Decimal) != 0)
painter->drawText(QRect(60,60 - 120 * Decimal ,60,60 + 120 * Decimal ),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else //>0.5
{
painter->drawText(QRect(60,120 - 120 * (Decimal - 0.5) ,60,120 * (Decimal - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
}
break;
case 2:
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
break;
case 3:
if(Decimal <= 0.5f)
{
if((60 - 120 * Decimal) != 0)
painter->drawText(QRect(60,0,60,60 - 120 * Decimal),Qt::AlignTop|Qt::AlignLeft, strText);
else
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(60,0,60,120 - 120 * (Decimal - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
}
break;
//此段程序在未理解之前,请不要随意修改
switch (count) {
case 1:
if(m_Unit <= 0.5f)
{
if((60 - 120 * m_Unit) != 0)
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,60 - 120 * m_Unit ,60,60 + 120 * m_Unit ),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,60 - 120 * m_Unit ,60,60 + 120 * m_Unit ),Qt::AlignBottom|Qt::AlignLeft, strText);
painter->drawText(QRect(60,60 - 120 * m_Unit ,60,60 + 120 * m_Unit ),Qt::AlignBottom|Qt::AlignLeft, QString::number(0));
}
}
}
else //>0.5
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,120 - 120 * (m_Unit - 0.5) ,60,120 * (m_Unit - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,120 - 120 * (m_Unit - 0.5) ,60,120 * (m_Unit - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
painter->drawText(QRect(60,120 - 120 * (m_Unit - 0.5) ,60,120 * (m_Unit - 0.5)),Qt::AlignBottom|Qt::AlignLeft, QString::number(0));
}
}
break;
case 2:
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, QString::number(0));
}
break;
case 3:
if(m_Unit <= 0.5f)
{
if((60 - 120 * m_Unit) != 0)
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,60 - 120 * m_Unit),Qt::AlignTop|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,60 - 120 * m_Unit),Qt::AlignTop|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,60 - 120 * m_Unit),Qt::AlignTop|Qt::AlignLeft, QString::number(0));
}
count++;
painter->restore();
}
}
else
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, QString::number(0));
}
}
}
else
{
if(m_GPS.altitude < 1000)
{
painter->drawText(QRect(0,0,60,120 - 120 * (m_Unit - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120 - 120 * (m_Unit - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
painter->drawText(QRect(60,0,60,120 - 120 * (m_Unit - 0.5)),Qt::AlignTop|Qt::AlignLeft, QString::number(0));
}
}
break;
}
count++;
painter->restore();
}
//写个位
if(m_GPS.altitude < 1000)
{
count = 1;
for(int i = -1.5 - Unit;i<(1.5 - Unit);i+=1)
{
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
painter->save();
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
font.setPointSize(70);
painter->setPen(ePen);
painter->setFont(font);
painter->translate(300,(i + Unit) * 120 - 60);
//此段程序在未理解之前,请不要随意修改
switch (count) {
case 1:
if(Decimal <= 0.5f)
{
if((60 - 120 * Decimal) != 0)
painter->drawText(QRect(60,60 - 120 * Decimal ,60,60 + 120 * Decimal ),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else //>0.5
{
painter->drawText(QRect(60,120 - 120 * (Decimal - 0.5) ,60,120 * (Decimal - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
}
break;
case 2:
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
break;
case 3:
if(Decimal <= 0.5f)
{
if((60 - 120 * Decimal) != 0)
painter->drawText(QRect(60,0,60,60 - 120 * Decimal),Qt::AlignTop|Qt::AlignLeft, strText);
else
painter->drawText(QRect(60,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(60,0,60,120 - 120 * (Decimal - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
}
break;
}
count++;
painter->restore();
}
}
+1 -1
View File
@@ -75,7 +75,7 @@ typedef struct{
float heading;//航线方向
float position;//侧偏距
float altitude;//海拔
View File