draw speed limit state bar

This commit is contained in:
2020-01-09 20:57:54 +08:00
parent dabe8c5617
commit 1b466f703e
2 changed files with 65 additions and 16 deletions
+58 -16
View File
@@ -43,6 +43,8 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
m_Attitude.verticalspeed = 0;//爬升速度
m_Target.airspeed_maximun = 25;
m_Target.airspeed_minimun = 15;
m_Battery.current[0] = 0;
@@ -670,11 +672,10 @@ void Cockpit::drawLeftScale(QPainter *painter)
if(i < 0)//小于0的刻度不显示
{
if((i%10) == 0)
{
painter->drawLine( 220,i * h,290,i * h);
painter->drawText(QRect(20,i * h - 30,190,60),Qt::AlignVCenter|Qt::AlignRight, strText);
painter->drawText(QRect(0,i * h - 30,190,80),Qt::AlignVCenter|Qt::AlignRight, strText);
}
else if((i%5) == 0)
@@ -682,10 +683,6 @@ void Cockpit::drawLeftScale(QPainter *painter)
painter->drawLine(240,i * h,290,i * h);
}
}
painter->restore();
}
@@ -699,13 +696,44 @@ void Cockpit::drawLeftScale(QPainter *painter)
//画旁边的速度彩条
painter->save();
painter->setBrush(QColor("#FFC125"));
painter->setBrush(QColor("#FF8C00"));//画橙色
painter->drawRect(275,-600,25,1200);
painter->setBrush(QColor("#228B22"));//画绿色
float y_green = -1200.0f/40.0f * (m_Target.airspeed_maximun- m_Attitude.airspeed);
float l_green = 1200.0f/40.0f * (m_Target.airspeed_maximun - m_Target.airspeed_minimun);
if((y_green + l_green) > 600)
{
l_green = 600 - y_green;
}
if(y_green < 600)
painter->drawRect(275,(y_green < -600)?(-600):(y_green),25,l_green);
painter->setBrush(QColor("#FF0000"));//画红色
float y_red = -1200.0f/40.0f * (m_Target.airspeed_minimun- m_Attitude.airspeed);
float l_red = 600 + 1200.0f/40.0f * (m_Target.airspeed_minimun- m_Attitude.airspeed);
if(y_red < 600)
{
if(y_red < -600)
{
y_red = -600;
l_red = 1200;
}
painter->drawRect(275,y_red,25,l_red);
}
painter->restore();
//画 中间黑色的显示块
painter->save();
/*
static const QPointF points1[11] = {
QPointF( 0,-50),
QPointF(200,-50),
@@ -721,9 +749,23 @@ void Cockpit::drawLeftScale(QPainter *painter)
QPointF(200, 50),
QPointF( 0, 50)
};
*/
static const QPointF points1[7] = {
QPointF( 0,-120),
QPointF(225,-120),
QPointF(225, -30),
QPointF(255, 0),
QPointF(225, 30),
QPointF(225, 120),
QPointF( 0, 120)
};
ePen.setColor(QColor("#FFFFFF"));
ePen.setWidth(8);
painter->setPen(ePen);
painter->setBrush(QColor("#000000"));
painter->drawPolygon(points1, 11);
painter->drawPolygon(points1, 7);
@@ -739,7 +781,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
QString DacadeText = QString::number(int(m_Attitude.airspeed/10)); //设置十位以上
QString UnitText = QString::number(qAbs(int(m_Attitude.airspeed)%10)); //设置个位
painter->drawText(QRect(0,-50,200,100),Qt::AlignVCenter|Qt::AlignRight, DacadeText);
painter->drawText(QRect(0,-50,150,100),Qt::AlignVCenter|Qt::AlignRight, DacadeText);
//painter->drawText(QRect(200,-50,100,100),Qt::AlignVCenter|Qt::AlignLeft, UnitText);
float Unit = m_Attitude.airspeed - int(m_Attitude.airspeed)/10 * 10;
@@ -762,7 +804,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
painter->setPen(ePen);
painter->setFont(font);
painter->translate(200,(i + Unit) * 120 - 60);
painter->translate(150,(i + Unit) * 120 - 60);
//此段程序在未理解之前,请不要随意修改
switch (count) {
@@ -770,27 +812,27 @@ void Cockpit::drawLeftScale(QPainter *painter)
if(Decimal <= 0.5f)
{
if((60 - 120 * Decimal) != 0)
painter->drawText(QRect(0,60 - 120 * Decimal ,60,60 + 120 * Decimal ),Qt::AlignBottom|Qt::AlignLeft, strText);
painter->drawText(QRect(0,60 - 120 * Decimal ,80,60 + 120 * Decimal ),Qt::AlignBottom|Qt::AlignLeft, strText);
}
else //>0.5
{
painter->drawText(QRect(0,120 - 120 * (Decimal - 0.5) ,60,120 * (Decimal - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
painter->drawText(QRect(0,120 - 120 * (Decimal - 0.5) ,80,120 * (Decimal - 0.5)),Qt::AlignBottom|Qt::AlignLeft, strText);
}
break;
case 2:
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(0,0,80,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
break;
case 3:
if(Decimal <= 0.5f)
{
if((60 - 120 * Decimal) != 0)
painter->drawText(QRect(0,0,60,60 - 120 * Decimal),Qt::AlignTop|Qt::AlignLeft, strText);
painter->drawText(QRect(0,0,80,60 - 120 * Decimal),Qt::AlignTop|Qt::AlignLeft, strText);
else
painter->drawText(QRect(0,0,60,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->drawText(QRect(0,0,80,120),Qt::AlignVCenter|Qt::AlignLeft, strText);
}
else
{
painter->drawText(QRect(0,0,60,120 - 120 * (Decimal - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
painter->drawText(QRect(0,0,80,120 - 120 * (Decimal - 0.5)),Qt::AlignTop|Qt::AlignLeft, strText);
}
break;
}
+7
View File
@@ -68,10 +68,17 @@ typedef struct{
float yaw;
float height;
float airspeed_maximun;
float airspeed;
float airspeed_minimun;
float heading;//航线方向
float position;//侧偏距
}_target;