hide number when it close to black block

This commit is contained in:
2020-01-03 18:32:37 +08:00
parent 12717eee0c
commit 45b2ead1e4
5 changed files with 454 additions and 751 deletions
+139 -749
View File
@@ -8,6 +8,11 @@
Cockpit::Cockpit(QWidget *parent): QWidget(parent)
{
// setMouseTracking(true);
leftladder = new LeftLadder(this);
//GPS初始化
m_GPS.fixtype = 0;
m_GPS.svn = 0;
@@ -224,6 +229,7 @@ void Cockpit::paintEvent(QPaintEvent *)
drawRollScale(&painter);
drawYawScale(&painter);
drawLeftScale(&painter);
drawRightScale(&painter);
//drawCenterLine(&painter);
//drawText(&painter);
//drawGPS(&painter);
@@ -551,9 +557,10 @@ void Cockpit::drawYawScale(QPainter *painter)
}
//画左刻度尺
//画左刻度尺 用单独的控件最容易解决
void Cockpit::drawLeftScale(QPainter *painter)
{
painter->save();
//平移坐标
@@ -612,11 +619,12 @@ void Cockpit::drawLeftScale(QPainter *painter)
if((i%10) == 0)
{
//if((i * h > 100)||(i * h < -100))
//{
painter->drawLine( 220,i * h,290,i * h);
painter->drawLine( 220,i * h,290,i * h);
if(((i + m_Attitude.airspeed)* h > 130)||((i + m_Attitude.airspeed) * h < -130))
{
painter->drawText(QRect(20,i * h - 30,190,60),Qt::AlignVCenter|Qt::AlignRight, strText);
//}
}
}
else if((i%5) == 0)
{
@@ -683,11 +691,11 @@ void Cockpit::drawLeftScale(QPainter *painter)
//painter->drawText(QRect(200,-50,100,100),Qt::AlignVCenter|Qt::AlignLeft, UnitText);
float Unit = m_Attitude.airspeed - int(m_Attitude.airspeed)/10 * 10;
float Decimal = (m_Attitude.airspeed - int(m_Attitude.airspeed));
qDebug() << Unit;
for(int i = -2 - Unit;i<=(2 - Unit);i+=1)
for(int i = -2 - Unit;i<(2 - Unit);i+=1)
{
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
@@ -701,10 +709,12 @@ void Cockpit::drawLeftScale(QPainter *painter)
painter->setPen(ePen);
painter->setFont(font);
painter->drawText(QRect(200,(i + Unit) * 100 - 50,100,90),Qt::AlignVCenter|Qt::AlignLeft, strText);
qDebug() << painter->window();
painter->drawText(QRect(200,(i + Unit) * 100 - 50,100,100),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->restore();
}
@@ -716,793 +726,173 @@ void Cockpit::drawLeftScale(QPainter *painter)
painter->restore();
}
//画中间刻度
void Cockpit::drawCenterLine(QPainter *painter)
{
QPen ePen;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
QFont font;
font.setPointSize(60);
painter->save();
painter->setPen(ePen);
painter->setFont(font);
//中间线
painter->drawLine(-600.0,0.0,-300.0,0.0);
painter->drawLine( 300.0,0.0, 600.0,0.0);
QPolygon polygonlefts,polygonright;
polygonlefts.setPoints(3,-300,0,-600,150,-450,150);
polygonright.setPoints(3, 300,0, 600,150, 450,150);
painter->drawPolygon(polygonlefts);
painter->drawPolygon(polygonright);
//画滚转刻度线
painter->drawArc(-700,-700,1400,1400,30*16,120*16);
//左边
for(int i = 0;i<=60;i+=20)
{
QString strText = QString::number(i); //设置当前字体
painter->save();
painter->translate(0,0);
painter->rotate(-i);
painter->drawLine(0,-680,0,-720);
painter->drawText(-30,-750, strText);
painter->restore();
}
//右边
for(int i = -20;i>=-60;i-=20)
{
QString strText = QString::number(i); //设置当前字体
painter->save();
painter->translate(0,0);
painter->rotate(-i);
painter->drawLine(0,-680,0,-720);
painter->drawText(-60,-750, strText);
painter->restore();
}
m_Max_Roll = m_RollValue + 60;
m_Min_Roll = m_RollValue - 60;
painter->restore();
//画滚转指针
painter->save();
QPolygon polygonRoll;
polygonRoll.setPoints(3, 0,-700, 50,-620, -50,-620);
QColor color;
if((m_Attitude.roll >= -60)&&(m_Attitude.roll <=60))
{
color = QColor("#EEEE00");
}else
{
color = QColor("#FF4500");
}
ePen.setColor(color);
painter->setPen(ePen);
painter->translate(0,0);
painter->rotate(-m_Attitude.roll);
painter->setBrush(color);
painter->drawPolygon(polygonRoll);
painter->restore();
//画角速度
painter->save();
//画俯仰角速度
QPolygon polygon1;
QPolygon polygon2;
QPolygon polygon3;
QPolygon polygon4;
QPolygon polygon5;
QPolygon polygon6;
//正向
polygon1.setPoints(4,0,-120,-50, -70,0,-170,50,-70);
polygon2.setPoints(4,0,-220,-50,-170,0,-270,50,-170);
polygon3.setPoints(4,0,-320,-50,-270,0,-370,50,-270);
//反向
polygon4.setPoints(4,0, 120,-50, 70,0, 170,50, 70);
polygon5.setPoints(4,0, 220,-50, 170,0, 270,50, 170);
polygon6.setPoints(4,0, 320,-50, 270,0, 370,50, 270);
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
//painter->drawPolygon(polygon1);
//painter->drawPolygon(polygon2);
//painter->drawPolygon(polygon3);
//painter->drawPolygon(polygon4);
//painter->drawPolygon(polygon5);
//painter->drawPolygon(polygon6);
if((m_Attitude.gy >= 10.0f)&&(m_Attitude.gy < 20.0f))//如果俯仰角速度大于15度开始显示第一个三角形
{
ePen.setColor(QColor("#76EE00"));
painter->setPen(ePen);
painter->setBrush(QColor("#76EE00"));//#76EE00绿色
painter->drawPolygon(polygon1);
}
else if((m_Attitude.gy >= 20.0f)&&(m_Attitude.gy < 30.0f))//显示第一第二个
{
ePen.setColor(QColor("#EEC900"));
painter->setPen(ePen);
painter->setBrush(QColor("#EEC900"));//#EEC900橙色
painter->drawPolygon(polygon1);
painter->drawPolygon(polygon2);
}
else if(m_Attitude.gy >= 30.0f)//显示三个颜色是红色
{
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
painter->drawPolygon(polygon1);
painter->drawPolygon(polygon2);
painter->drawPolygon(polygon3);
}
else if((m_Attitude.gy <= -10.0f)&&(m_Attitude.gy > -20.0f))//如果俯仰角速度小于-15度开始显示第一个三角形绿色
{
ePen.setColor(QColor("#76EE00"));
painter->setPen(ePen);
painter->setBrush(QColor("#76EE00"));//#76EE00绿色
painter->drawPolygon(polygon4);
}
else if((m_Attitude.gy <= -20.0f)&&(m_Attitude.gy > -30.0f))//显示第一第二个橙色
{
ePen.setColor(QColor("#EEC900"));
painter->setPen(ePen);
painter->setBrush(QColor("#EEC900"));//#EEC900橙色
painter->drawPolygon(polygon4);
painter->drawPolygon(polygon5);
}
else if(m_Attitude.gy <= -30.0f)//显示三个颜色是红色
{
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
painter->drawPolygon(polygon4);
painter->drawPolygon(polygon5);
painter->drawPolygon(polygon6);
}
//画滚转角速度
QPolygon polygon7;
QPolygon polygon8;
QPolygon polygon9;
QPolygon polygon10;
QPolygon polygon11;
QPolygon polygon12;
//正向
polygon7.setPoints(4,250,-400,200,-450,300,-400,200,-350);
polygon8.setPoints(4,350,-400,300,-450,400,-400,300,-350);
polygon9.setPoints(4,450,-400,400,-450,500,-400,400,-350);
//反向
polygon10.setPoints(4,-250,-400,-200,-450,-300,-400,-200,-350);
polygon11.setPoints(4,-350,-400,-300,-450,-400,-400,-300,-350);
polygon12.setPoints(4,-450,-400,-400,-450,-500,-400,-400,-350);
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
//painter->drawPolygon(polygon7);
//painter->drawPolygon(polygon8);
//painter->drawPolygon(polygon9);
//painter->drawPolygon(polygon10);
//painter->drawPolygon(polygon11);
//painter->drawPolygon(polygon12);
if((m_Attitude.gx >= 10.0f)&&(m_Attitude.gx < 20.0f))//如果俯仰角速度大于15度开始显示第一个三角形
{
ePen.setColor(QColor("#76EE00"));
painter->setPen(ePen);
painter->setBrush(QColor("#76EE00"));//#76EE00绿色
painter->drawPolygon(polygon7);
}
else if((m_Attitude.gx >= 20.0f)&&(m_Attitude.gx < 30.0f))//显示第一第二个
{
ePen.setColor(QColor("#EEC900"));
painter->setPen(ePen);
painter->setBrush(QColor("#EEC900"));//#EEC900橙色
painter->drawPolygon(polygon7);
painter->drawPolygon(polygon8);
}
else if(m_Attitude.gx >= 30.0f)//显示三个颜色是红色
{
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
painter->drawPolygon(polygon7);
painter->drawPolygon(polygon8);
painter->drawPolygon(polygon9);
}
else if((m_Attitude.gx <= -10.0f)&&(m_Attitude.gx > -20.0f))//如果俯仰角速度小于-15度开始显示第一个三角形绿色
{
ePen.setColor(QColor("#76EE00"));
painter->setPen(ePen);
painter->setBrush(QColor("#76EE00"));//#76EE00绿色
painter->drawPolygon(polygon10);
}
else if((m_Attitude.gx <= -20.0f)&&(m_Attitude.gx > -30.0f))//显示第一第二个橙色
{
ePen.setColor(QColor("#EEC900"));
painter->setPen(ePen);
painter->setBrush(QColor("#EEC900"));//#EEC900橙色
painter->drawPolygon(polygon10);
painter->drawPolygon(polygon11);
}
else if(m_Attitude.gx <= -30.0f)//显示三个颜色是红色
{
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
painter->drawPolygon(polygon10);
painter->drawPolygon(polygon11);
painter->drawPolygon(polygon12);
}
//画偏航角速度
QPolygon polygon13;
QPolygon polygon14;
QPolygon polygon15;
QPolygon polygon16;
QPolygon polygon17;
QPolygon polygon18;
//正向
polygon13.setPoints(4,250,-900,200,-950,300,-900,200,-850);
polygon14.setPoints(4,350,-900,300,-950,400,-900,300,-850);
polygon15.setPoints(4,450,-900,400,-950,500,-900,400,-850);
//反向
polygon16.setPoints(4,-250,-900,-200,-950,-300,-900,-200,-850);
polygon17.setPoints(4,-350,-900,-300,-950,-400,-900,-300,-850);
polygon18.setPoints(4,-450,-900,-400,-950,-500,-900,-400,-850);
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
//painter->drawPolygon(polygon13);
//painter->drawPolygon(polygon14);
//painter->drawPolygon(polygon15);
//painter->drawPolygon(polygon16);
//painter->drawPolygon(polygon17);
//painter->drawPolygon(polygon18);
if((m_Attitude.gz >= 10.0f)&&(m_Attitude.gz < 20.0f))//如果俯仰角速度大于15度开始显示第一个三角形
{
ePen.setColor(QColor("#76EE00"));
painter->setPen(ePen);
painter->setBrush(QColor("#76EE00"));//#76EE00绿色
painter->drawPolygon(polygon13);
}
else if((m_Attitude.gz >= 20.0f)&&(m_Attitude.gz < 30.0f))//显示第一第二个
{
ePen.setColor(QColor("#EEC900"));
painter->setPen(ePen);
painter->setBrush(QColor("#EEC900"));//#EEC900橙色
painter->drawPolygon(polygon13);
painter->drawPolygon(polygon14);
}
else if(m_Attitude.gz >= 30.0f)//显示三个颜色是红色
{
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
painter->drawPolygon(polygon13);
painter->drawPolygon(polygon14);
painter->drawPolygon(polygon15);
}
else if((m_Attitude.gz <= -10.0f)&&(m_Attitude.gz > -20.0f))//如果俯仰角速度小于-15度开始显示第一个三角形绿色
{
ePen.setColor(QColor("#76EE00"));
painter->setPen(ePen);
painter->setBrush(QColor("#76EE00"));//#76EE00绿色
painter->drawPolygon(polygon16);
}
else if((m_Attitude.gz <= -20.0f)&&(m_Attitude.gz > -30.0f))//显示第一第二个橙色
{
ePen.setColor(QColor("#EEC900"));
painter->setPen(ePen);
painter->setBrush(QColor("#EEC900"));//#EEC900橙色
painter->drawPolygon(polygon16);
painter->drawPolygon(polygon17);
}
else if(m_Attitude.gz <= -30.0f)//显示三个颜色是红色
{
ePen.setColor(QColor("#EE4000"));
painter->setPen(ePen);
painter->setBrush(QColor("#EE4000"));//#EE4000红色
painter->drawPolygon(polygon16);
painter->drawPolygon(polygon17);
painter->drawPolygon(polygon18);
}
painter->restore();
}
void Cockpit::drawLowPanel(QPainter *painter)
{
QPen ePen;
ePen.setWidth(10);
//画左刻度尺 用单独的控件最容易解决
void Cockpit::drawRightScale(QPainter *painter)
{
painter->save();
//平移坐标
painter->translate(800,0);
QPen ePen;
QFont font;
//画边界
/* painter->save();
ePen.setColor(QColor("#000000"));
painter->setPen(ePen);
painter->drawLine(-1000,400,1000,400);
painter->drawLine(-400,400,-400,1000);
painter->drawLine(400,400,400,1000);
//画一个半透明的小方块
painter->save();
painter->setOpacity(0.3f);
ePen.setColor(QColor("#7A7A7A"));
painter->setBrush(QColor("#7A7A7A"));
painter->drawRect(0,-600,300,1200);
painter->restore();
*/
//画底色
//画最底下的黑色单位显示框
painter->save();
ePen.setColor(QColor("#FFFFFF"));
painter->setPen(ePen);
painter->setBrush(QColor("#FFFFFF"));
painter->drawRoundedRect(-990,410,580,580,50,50);
painter->drawRoundedRect(-390,410,780,580,50,50);
painter->drawRoundedRect(410,410,580,580,50,50);
painter->restore();
//画升降速度表盘
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
font.setPixelSize(60);
painter->setPen(ePen);
int VstartAngle = 120 * 16;
int VspanAngle = 120 * 16;
painter->drawArc(-980,420,560,560,VstartAngle,VspanAngle);
painter->restore();
//画刻度
for(int i = 0;i<5;i++)
{
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
font.setPixelSize(70);
painter->setFont(font);
painter->translate(-700,700);
painter->rotate(15*i);
painter->drawLine(-280,0,-260,0);
if((i%2 == 0)&&(i != 0))
{
painter->drawText(-240,-30,60,60,Qt::AlignCenter,QString::number(i));
}
painter->restore();
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
font.setPixelSize(70);
painter->setFont(font);
painter->translate(-700,700);
painter->rotate(-15*i);
painter->drawLine(-280,0,-260,0);
if(i%2 == 0)
{
painter->drawText(-240,-30,60,60,Qt::AlignCenter,QString::number(-i));
}
painter->restore();
}
//画指针
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
painter->translate(-700,700);
painter->rotate(m_Attitude.verticalspeed * 15);
QPolygon polygon;
polygon.setPoints(3,-160,0,0,-20,0,20);
painter->setFont(font);
painter->setBrush(QColor("#000000"));
painter->drawPolygon(polygon);
painter->drawEllipse(-20,-20,40,40);
painter->drawRect(0,600,300,100);
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_Attitude.airspeed));
painter->restore();
//画单位和示数
//画旁边的速度刻度,并显示
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
font.setPixelSize(140);
painter->setFont(font);
painter->translate(-700,700);
painter->drawText(-40,-290,280,140,Qt::AlignCenter,tr("m/s"));
painter->drawText(-40,140,280,140,Qt::AlignCenter,QString::number(m_Attitude.verticalspeed,'f',1));
painter->restore();
painter->translate(0,1200.0f/40.0f * m_Attitude.airspeed);
float h = 1200.0f/40.0f;//单位高度
//画空速表盘
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
int HstartAngle = -30 * 16;
int HspanAngle = 240 * 16;
painter->drawArc(420,420,560,560,HstartAngle,HspanAngle);
painter->restore();
//画刻度
for(int i = 0;i<7;i++)
for(int i = -19 - m_Attitude.airspeed;i<=(19 - m_Attitude.airspeed);i+=1)
{
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
font.setPixelSize(70);
painter->setFont(font);
painter->translate(700,700);
painter->rotate(20*i);
painter->drawLine(0,-280,0,-260);
if((i%2 == 0)&&(i != 0))
{
painter->drawText(-30,-240,60,60,Qt::AlignCenter,QString::number(30 + i*5));
}
painter->restore();
QString strText = QString::number(-i); //设置当前字体
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
font.setPixelSize(70);
painter->setFont(font);
QPen ePen;
QFont font;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
font.setPointSize(60);
painter->setPen(ePen);
painter->translate(700,700);
painter->rotate(-20*i);
painter->drawLine(0,-280,0,-260);
if(i%2 == 0)
painter->setFont(font);
if((i%10) == 0)
{
painter->drawText(-30,-240,60,60,Qt::AlignCenter,QString::number(30 - i*5));
//if((i * h > 100)||(i * h < -100))
//{
painter->drawLine(0,i * h,70,i * h);
painter->drawText(QRect(-20,i * h - 30,190,60),Qt::AlignVCenter|Qt::AlignRight, strText);
//}
}
else if((i%2) == 0)
{
painter->drawLine(0,i * h,50,i * h);
}
painter->restore();
}
//画指针
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
painter->translate(700,700);
painter->rotate(m_Attitude.airspeed * 4 -120);
//QPolygon polygon;
polygon.setPoints(3,-20,0,0,-160,20,0);
painter->setBrush(QColor("#000000"));
painter->drawPolygon(polygon);
painter->drawEllipse(-20,-20,40,40);
painter->restore();
//画单位和示数
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
painter->translate(700,700);
font.setPixelSize(80);
painter->setFont(font);
painter->drawText(-300,20,600,100,Qt::AlignCenter,tr("m/s"));
font.setPixelSize(140);
painter->setFont(font);
painter->drawText(-300,140,600,140,Qt::AlignCenter,QString::number(m_Attitude.airspeed,'f',1));
painter->restore();
//绘制中间盘的信息
painter->save();
ePen.setColor(QColor("#000000"));
ePen.setWidth(10);
painter->setPen(ePen);
painter->translate(0,700);
font.setPixelSize(140);
painter->setFont(font);
QString GPS_Str = "";
GPS_Str.append(tr("GPS:"));
GPS_Str.append(QString::number(m_GPS.fixtype) + tr(" "));
GPS_Str.append(QString::number(m_GPS.svn));
painter->drawText(-380,-290,760,140,Qt::AlignLeft,GPS_Str);
painter->restore();
static const QPointF points1[11] = {
QPointF( 25,-50),
QPointF(200,-50),
QPointF(200,-100),
QPointF(300,-100),
QPointF(300, 100),
QPointF(200, 100),
QPointF(200, 50),
QPointF( 25, 50),
}
void Cockpit::drawText(QPainter *painter)
{
painter->save();
painter->setPen(m_CentreLineColor);
painter->drawText(-60, 55,"Pitch");
painter->drawText(-60, 65,QString::number(m_PitchValue,'f',1));
painter->drawText( 35, 55,"Roll");
painter->drawText( 35, 65,QString::number(m_RollValue,'f',1));
painter->drawText(-10, 55,"Yaw");
painter->drawText(-10, 65,QString::number(m_YawValue,'f',1));
painter->drawText(-68,-60,"GPS:");
if(m_GPSStatusValue == 0)
painter->drawText(-45,-60,tr("无效"));
else
painter->drawText(-45,-60,tr("正常"));
painter->drawText(-68,-48,"NSV:");
painter->drawText(-45,-48,QString::number(m_GPSStarValue,'f',0));
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect(-20,-88,40, 16);
painter->drawText(-12,-76,QString::number(m_CourseValue,'f',1));
//飞机模式
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect(-70, 72,40, 16);
painter->drawText(-68, 84,m_AirplaneModeValue);
//锁定状态
if(m_LockStatusValue == "已解锁")
m_GroundColor = Qt::darkRed;
else if(m_LockStatusValue == "未解锁")
m_GroundColor = Qt::darkGreen;
else
m_GroundColor = Qt::darkYellow;
painter->setBrush(m_GroundColor);
painter->drawRect(-20, 72,40, 16);
painter->drawText(-18, 84,m_LockStatusValue);
//控制模式
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect( 30, 72,40, 16);
painter->drawText( 38, 84,m_CtrlModeValue);
//飞行状态
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect(-70,-88,40, 16);
painter->drawText(-62,-76,m_CurrentStatusValue);
//转弯状态
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect( 30,-88,40, 16);
painter->drawText( 38,-76,m_TurningStatusValue);
painter->restore();
}
void Cockpit::drawGPS(QPainter *painter)
{
static const QPointF points[4] = {
QPointF(-75.0,-90.0),
QPointF(-90.0,-75.0),
QPointF(-90.0, 75.0),
QPointF(-75.0, 90.0)
};
QColor GPScolor = Qt::black;
painter->save();
painter->setBrush(GPScolor);
painter->drawPolygon(points,8);
painter->restore();
}
void Cockpit::drawHight(QPainter *painter)
{
static const QPointF points[4] = {
QPointF(-80.0,-50.0),
QPointF(-50.0,-30.0),
QPointF(-50.0, 30.0),
QPointF(-80.0, 50.0)
QPointF( 25,-25),
QPointF( 0, 0),
QPointF( 25, 25)
};
if(m_Protect != 0)
{
m_GroundColor = 0xff4500;
}
else
{
m_GroundColor = Qt::darkCyan;
}
painter->save();
painter->setBrush(m_ForeColor);
painter->drawPolygon(points,4);
painter->restore();
painter->setBrush(QColor("#000000"));
painter->drawPolygon(points1, 11);
painter->save();
painter->setPen(m_CentreLineColor);
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect(-88,-20,35, 16);
painter->drawText(-86,-8,QString::number(m_GPSAltitudeValue,'f',1));
painter->drawText(-88,-25,tr("海拔"));
painter->drawRect(-88,4,35, 16);
painter->drawText(-86,17,QString::number(m_PressureAltitudeValue,'f',1));
ePen.setColor(m_CentreLineColor);
ePen.setWidth(15);
font.setPointSize(90);
painter->setPen(ePen);
painter->setFont(font);
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(200,-50,100,100),Qt::AlignVCenter|Qt::AlignLeft, UnitText);
float Unit = m_Attitude.airspeed - int(m_Attitude.airspeed)/10 * 10;
float Decimal = (m_Attitude.airspeed - int(m_Attitude.airspeed));
//qDebug() << Unit;
for(int i = -2 - Unit;i<(2 - Unit);i+=1)
{
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
painter->save();
QPen ePen;
QFont font;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(15);
font.setPointSize(90);
painter->setPen(ePen);
painter->setFont(font);
painter->drawText(QRect(200,(i + Unit) * 100 - 50,100,90),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->restore();
}
//painter->restore();
painter->drawText(-88,33,tr("气压"));
painter->restore();
}
void Cockpit::drawSpeed(QPainter *painter)
{
static const QPointF points[4] = {
QPointF( 80.0,-50.0),
QPointF( 50.0,-30.0),
QPointF( 50.0, 30.0),
QPointF( 80.0, 50.0)
};
if(m_Protect != 0)
{
m_GroundColor = 0xff4500;
}
else
{
m_GroundColor = Qt::darkCyan;
}
painter->save();
painter->setBrush(m_ForeColor);
painter->drawPolygon(points,4);
painter->restore();
painter->save();
painter->setPen(m_CentreLineColor);
m_GroundColor = Qt::darkCyan;
painter->setBrush(m_GroundColor);
painter->drawRect( 53,-20,35, 16);
painter->drawText( 55,-8,QString::number(m_air_speed,'f',1));
painter->drawText( 64,-25,tr("空速"));
painter->drawRect( 53,4,35, 16);
painter->drawText( 55,17,QString::number(m_gps_speed,'f',1));
painter->drawText( 64,33,tr("地速"));
painter->restore();
}
void Cockpit::drawBattery(QPainter *painter)
{
static const QPointF points[8] = {
QPointF( 68.0,-68.0),
QPointF( 68.0,-52.0),
QPointF( 36.0,-52.0),
QPointF( 36.0,-56.0),
QPointF( 34.0,-56.0),
QPointF( 34.0,-64.0),
QPointF( 36.0,-64.0),
QPointF( 36.0,-68.0)
};
if(m_BatteryValue < m_BatteryMinValue)
{
m_ForeColor = Qt::red;
}
else if(m_BatteryValue > m_BatteryMaxValue)
{
m_ForeColor = Qt::green;
}
else
{
m_ForeColor = Qt::white;
}
painter->save();
painter->setBrush(m_ForeColor);
painter->drawPolygon(points,8);
painter->restore();
painter->save();
painter->setPen(m_CentreLineColor);
painter->drawText( 37,-42,QString::number(m_BatteryValue,'f',1)+"V");
painter->restore();
double B;
B = (m_BatteryValue - m_BatteryMinValue)/(m_BatteryMaxValue - m_BatteryMinValue);
quint8 Flag = 0;
if(B<=0.25)
Flag = 1;
else if(B <= 0.5)
Flag = 2;
else if(B<=0.75)
Flag = 3;
else
Flag = 4;
switch(Flag)
{
case 4:
{
m_ForeColor = Qt::black;
painter->save();
painter->setBrush(m_ForeColor);
painter->drawRect(37,-66,6,12);
painter->restore();
}
case 3:
{
m_ForeColor = Qt::black;
painter->save();
painter->setBrush(m_ForeColor);
painter->drawRect(45,-66,6,12);
painter->restore();
}
case 2:
{
m_ForeColor = Qt::black;
painter->save();
painter->setBrush(m_ForeColor);
painter->drawRect(53,-66,6,12);
painter->restore();
}
case 1:
{
m_ForeColor = Qt::black;
painter->save();
painter->setBrush(m_ForeColor);
painter->drawRect(61,-66,6,12);
painter->restore();
}
}
}
+17
View File
@@ -4,6 +4,9 @@
#include <QWidget>
#include <QMouseEvent>
#include "leftladder.h"
class QColor;
class Cockpit: public QWidget
@@ -116,6 +119,7 @@ protected:
void drawYawScale(QPainter *painter);
void drawLeftScale(QPainter *painter);
void drawRightScale(QPainter *painter);
void drawCenterLine(QPainter *painter);
void drawText(QPainter *painter);
@@ -202,6 +206,19 @@ private:
QPoint m_c;
LeftLadder *leftladder;
};
#endif // ALTITUDEPANEL_H
+4 -2
View File
@@ -26,10 +26,12 @@ DEFINES += QT_DEPRECATED_WARNINGS
HEADERS += \
$$PWD/Cockpit.h
$$PWD/Cockpit.h \
leftladder.h
SOURCES += \
$$PWD/Cockpit.cpp
$$PWD/Cockpit.cpp \
leftladder.cpp
+244
View File
@@ -0,0 +1,244 @@
#include "leftladder.h"
LeftLadder::LeftLadder(QWidget *parent): QWidget(parent)
{
m_CentreLineColor = Qt::white;
}
void LeftLadder::setAirSpeed(float speed)
{
airspeed = speed;
}
void LeftLadder::mouseReleaseEvent(QMouseEvent *e)
{
qDebug() << "release" << e;
update();
}
void LeftLadder::mousePressEvent(QMouseEvent *e)
{
qDebug() << "press" << e;
update();
}
void LeftLadder::mouseDoubleClickEvent(QMouseEvent *e)
{
qDebug() << "double clicked" << e;
update();
}
void LeftLadder::wheelEvent(QWheelEvent *e)
{
qDebug() << "wheel event" << e;
update();
}
void LeftLadder::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */
//painter.translate(width() / 2, 2 * height() / 5); /* 坐标变换为窗体中心 */
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
painter.scale(side / 2000.0, side / 2000.0); /* 比例缩放 */
painter.setPen(Qt::NoPen);
drawLeftScale(&painter);
}
//画左刻度尺 用单独的控件最容易解决
void LeftLadder::drawLeftScale(QPainter *painter)
{
painter->save();
//平移坐标
painter->translate(-1100,0);
QPen ePen;
QFont font;
//画一个半透明的小方块
painter->save();
painter->setOpacity(0.3f);
ePen.setColor(QColor("#7A7A7A"));
painter->setBrush(QColor("#7A7A7A"));
painter->drawRect(0,-600,300,1200);
painter->restore();
//画最底下的黑色单位显示框
painter->save();
ePen.setColor(QColor("#FFFFFF"));
ePen.setWidth(10);
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(airspeed));
painter->restore();
//画旁边的速度刻度,并显示
painter->save();
painter->translate(0,1200.0f/40.0f * airspeed);
float h = 1200.0f/40.0f;//单位高度
for(int i = -19 - airspeed;i<=(19 - airspeed);i+=1)
{
QString strText = QString::number(-i); //设置当前字体
painter->save();
QPen ePen;
QFont font;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
font.setPointSize(60);
painter->setPen(ePen);
painter->setFont(font);
if((i%10) == 0)
{
//if((i * h > 100)||(i * h < -100))
//{
painter->drawLine( 220,i * h,290,i * h);
painter->drawText(QRect(20,i * h - 30,190,60),Qt::AlignVCenter|Qt::AlignRight, strText);
//}
}
else if((i%5) == 0)
{
painter->drawLine(240,i * h,290,i * h);
}
painter->restore();
}
painter->restore();
//画旁边的速度彩条
painter->save();
painter->setBrush(QColor("#FFC125"));
painter->drawRect(275,-600,25,1200);
painter->restore();
//画 中间黑色的显示块
painter->save();
static const QPointF points1[11] = {
QPointF( 0,-50),
QPointF(200,-50),
QPointF(200,-100),
QPointF(275,-100),
QPointF(275,-25),
QPointF(290, 0),
QPointF(275, 25),
QPointF(275, 100),
QPointF(200, 100),
QPointF(200, 50),
QPointF( 0, 50)
};
painter->setBrush(QColor("#000000"));
painter->drawPolygon(points1, 11);
ePen.setColor(m_CentreLineColor);
ePen.setWidth(15);
font.setPointSize(90);
painter->setPen(ePen);
painter->setFont(font);
QString DacadeText = QString::number(int(airspeed/10)); //设置十位以上
QString UnitText = QString::number(qAbs(int(airspeed)%10)); //设置个位
painter->drawText(QRect(0,-50,200,100),Qt::AlignVCenter|Qt::AlignRight, DacadeText);
//painter->drawText(QRect(200,-50,100,100),Qt::AlignVCenter|Qt::AlignLeft, UnitText);
float Unit = airspeed - int(airspeed)/10 * 10;
float Decimal = (airspeed - int(airspeed));
qDebug() << Unit;
for(int i = -2 - Unit;i<(2 - Unit);i+=1)
{
QString strText = QString::number(((-i < 0)?(-i+10):((-i>=10)?(-i-10):(-i)))); //设置当前字体
painter->save();
QPen ePen;
QFont font;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(15);
font.setPointSize(90);
painter->setPen(ePen);
painter->setFont(font);
painter->drawText(QRect(200,(i + Unit) * 100 - 50,100,90),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->restore();
}
painter->restore();
painter->restore();
}
+50
View File
@@ -0,0 +1,50 @@
#ifndef LEFTLADDER_H
#define LEFTLADDER_H
#include <QObject>
#include "QWidget"
#include <QMouseEvent>
#include "QDebug"
#include <QPainter>
#include <QtCore/qmath.h>
#include "QThread"
#include "QDebug"
#include "QPicture"
class LeftLadder: public QWidget
{
Q_OBJECT
public:
explicit LeftLadder(QWidget *parent = 0);
public slots:
void setAirSpeed(float speed);
protected:
void mouseReleaseEvent(QMouseEvent *e);
void mousePressEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *e);
void paintEvent(QPaintEvent *);
void drawLeftScale(QPainter *painter);
private:
float airspeed;
QColor m_CentreLineColor;
};
#endif // LEFTLADDER_H