merge
This commit is contained in:
+532
-148
@@ -9,8 +9,7 @@
|
||||
|
||||
Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
{
|
||||
// setMouseTracking(true);
|
||||
//leftladder = new LeftLadder(this);
|
||||
//载入配置参数
|
||||
|
||||
|
||||
//颜色初始化
|
||||
@@ -47,26 +46,27 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
|
||||
m_State.AOA = 0;
|
||||
|
||||
m_State.altitude = 0;
|
||||
m_State.height = 0;
|
||||
|
||||
m_State.airspeed = 0;//空速
|
||||
m_State.AirspeedFlag = 2;//i c t
|
||||
m_State.horizontalspeed = 0;//侧滑速度
|
||||
m_State.verticalspeed = 0;//爬升速度
|
||||
|
||||
|
||||
m_Target.airspeed_maximun = 25;
|
||||
m_Target.airspeed_minimun = 15;
|
||||
|
||||
m_SPD_HOLD = "MCP SPD";
|
||||
m_HDG_HOLD = "HDG SEL";
|
||||
m_ALT_HOLD = "ALT HOLD";
|
||||
m_State.GPS = "GPS";
|
||||
m_State.MODE = "MODE";
|
||||
m_State.STATE = "ARM";
|
||||
|
||||
|
||||
//初始化完成后打开定时器开始计数刷新
|
||||
UpdateTimer = new QTimer;
|
||||
|
||||
UpdateTimer = new QTimer(this);
|
||||
connect(UpdateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(UpdateTimeout()));
|
||||
|
||||
UpdateTimer->start(50);//50Hz
|
||||
UpdateTimer->start(100);//10Hz
|
||||
|
||||
|
||||
}
|
||||
@@ -88,22 +88,54 @@ void Cockpit::UpdateTimeout(void)
|
||||
//如果已经设置了新的数据,那么刷新
|
||||
if(m_State.isUpdate == true)
|
||||
{
|
||||
m_State.airspeed = m_State.airspeed*0.75 + m_State.airspeed_t*0.25;
|
||||
|
||||
m_State.altitude = m_State.altitude*0.75 + m_State.altitude_t*0.25;
|
||||
|
||||
m_State.verticalspeed = m_State.verticalspeed*0.75 + m_State.verticalspeed_t*0.25;
|
||||
|
||||
update();
|
||||
m_State.isUpdate = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Cockpit::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
const QPoint curPos = e->pos();
|
||||
if (isPress)
|
||||
{
|
||||
QPoint offset = curPos - lastPoint;
|
||||
lastPoint = curPos;
|
||||
|
||||
V_pos += 100.0 * offset.y()/height();
|
||||
H_pos += 100.0 * offset.x()/width();
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void Cockpit::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
qDebug() << "cockpit release" << e;
|
||||
isPress = false;
|
||||
setCursor(Qt::ArrowCursor);
|
||||
}
|
||||
|
||||
void Cockpit::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
qDebug() << "cockpit press" << e;
|
||||
if (e->button() == Qt::RightButton)
|
||||
{
|
||||
lastPoint = e->pos();
|
||||
isPress = true;
|
||||
setCursor(Qt::ClosedHandCursor);
|
||||
}
|
||||
else if(e->buttons() == Qt::MiddleButton)
|
||||
{
|
||||
Scale = 2100;//默认很大
|
||||
H_pos = 44.7059;
|
||||
V_pos = 43.8235;
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
void Cockpit::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
@@ -113,10 +145,82 @@ void Cockpit::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
|
||||
void Cockpit::wheelEvent(QWheelEvent *e)
|
||||
{
|
||||
Q_UNUSED(e);
|
||||
//update();
|
||||
switch(e->modifiers())
|
||||
{
|
||||
case Qt::ControlModifier://垂直移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
V_pos -= 1;
|
||||
if(V_pos < 1)
|
||||
{
|
||||
V_pos = 1;
|
||||
}
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
V_pos += 1;
|
||||
if(V_pos > 100)
|
||||
{
|
||||
V_pos = 100;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case Qt::ShiftModifier://水平移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
H_pos -= 1;
|
||||
if(H_pos < 1)
|
||||
{
|
||||
H_pos = 1;
|
||||
}
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
H_pos += 1;
|
||||
if(H_pos > 100)
|
||||
{
|
||||
H_pos = 100;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case Qt::AltModifier://水平移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
m_State.altitude -= 0.1;
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
m_State.altitude += 0.1;
|
||||
}
|
||||
}break;
|
||||
default://水平移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
Scale -= 50;
|
||||
if(Scale < 50)
|
||||
{
|
||||
Scale = 50;
|
||||
}
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
Scale += 50;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//保存配置参数
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
void Cockpit::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
emit SizeChanged(event);
|
||||
@@ -139,13 +243,27 @@ void Cockpit::showEvent(QShowEvent *event)
|
||||
}
|
||||
|
||||
|
||||
=======
|
||||
>>>>>>> develop
|
||||
|
||||
void Cockpit::setPitch(double Pitch)
|
||||
{
|
||||
if(isnan(Pitch))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#ifdef unix
|
||||
|
||||
#else
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#else
|
||||
if(isnan(Pitch))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//if(Pitch > 360) Pitch = 360;
|
||||
//else if(Pitch < -360) Pitch = -360;
|
||||
|
||||
int n = Pitch/360;
|
||||
Pitch = Pitch - n*360;
|
||||
m_State.pitch = Pitch;
|
||||
@@ -160,12 +278,56 @@ void Cockpit::setPitch(double Pitch)
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setPitchTarget(double Pitch)
|
||||
{
|
||||
#ifdef unix
|
||||
|
||||
#else
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#else
|
||||
if(isnan(Pitch))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//if(Pitch > 360) Pitch = 360;
|
||||
//else if(Pitch < -360) Pitch = -360;
|
||||
|
||||
int n = Pitch/360;
|
||||
Pitch = Pitch - n*360;
|
||||
m_Target.pitch = Pitch;
|
||||
if(m_Target.pitch < -90)
|
||||
{
|
||||
m_Target.pitch += 180;
|
||||
}
|
||||
else if(m_Target.pitch > 90)
|
||||
{
|
||||
m_Target.pitch -= 180;
|
||||
}
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::setRoll(double Roll)
|
||||
{
|
||||
if(isnan(Roll))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#ifdef unix
|
||||
|
||||
#else
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#else
|
||||
if(isnan(Roll))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
//if(Roll > 360) Roll = 360;
|
||||
//else if(Roll < -360) Roll = -360;
|
||||
|
||||
int n = Roll/360;
|
||||
Roll = Roll - n*360;
|
||||
m_State.roll = Roll;
|
||||
@@ -180,14 +342,57 @@ void Cockpit::setRoll(double Roll)
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setRollTarget(double Roll)
|
||||
{
|
||||
#ifdef unix
|
||||
|
||||
#else
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#else
|
||||
if(isnan(Roll))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
//if(Roll > 360) Roll = 360;
|
||||
//else if(Roll < -360) Roll = -360;
|
||||
|
||||
int n = Roll/360;
|
||||
Roll = Roll - n*360;
|
||||
m_Target.roll = Roll;
|
||||
if(m_Target.roll < -180)
|
||||
{
|
||||
m_Target.roll += 360;
|
||||
}
|
||||
else if(m_Target.roll > 180)
|
||||
{
|
||||
m_Target.roll -= 360;
|
||||
}
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::setYaw(double Yaw)
|
||||
{
|
||||
if(isnan(Yaw))
|
||||
{
|
||||
return;
|
||||
}
|
||||
int n = Yaw/360;
|
||||
Yaw = Yaw - n*360;
|
||||
|
||||
#ifdef unix
|
||||
|
||||
#else
|
||||
#ifdef __MINGW32__
|
||||
|
||||
#else
|
||||
if(isnan(Yaw))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if(Yaw < 0) Yaw += 360;
|
||||
else if(Yaw > 360) Yaw -= 360;
|
||||
|
||||
m_State.yaw = Yaw;
|
||||
if(m_State.yaw < 0)
|
||||
{
|
||||
@@ -196,6 +401,33 @@ void Cockpit::setYaw(double Yaw)
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setYawTarget(double Yaw)
|
||||
{
|
||||
#ifdef unix
|
||||
|
||||
#else
|
||||
#ifdef __MINGW32__
|
||||
|
||||
|
||||
#else
|
||||
if(isnan(Yaw))
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
if(Yaw < 0) Yaw += 360;
|
||||
else if(Yaw > 360) Yaw -= 360;
|
||||
|
||||
m_Target.yaw = Yaw;
|
||||
if(m_Target.yaw < 0)
|
||||
{
|
||||
m_Target.yaw += 360;
|
||||
}
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Cockpit::setAttitude(double Pitch,double Roll,double Yaw)
|
||||
{
|
||||
@@ -204,46 +436,147 @@ void Cockpit::setAttitude(double Pitch,double Roll,double Yaw)
|
||||
setYaw(Yaw);
|
||||
}
|
||||
|
||||
void Cockpit::setAttitudeTarget(double Pitch,double Roll,double Yaw)
|
||||
{
|
||||
setPitchTarget(Pitch);
|
||||
setRollTarget(Roll);
|
||||
setYawTarget(Yaw);
|
||||
}
|
||||
|
||||
void Cockpit::setAttitudeSpeed(double PitchSpeed,double RollSpeed,double YawSpeed)
|
||||
{
|
||||
m_State.gy = PitchSpeed;
|
||||
m_State.gx = RollSpeed;
|
||||
m_State.gz = YawSpeed;
|
||||
m_State.isUpdate = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::setAltitude(double Altitude)
|
||||
{
|
||||
m_State.altitude = Altitude;
|
||||
if(Altitude > 99999) Altitude = 99999;
|
||||
else if(Altitude < (-9999)) Altitude = -9999;
|
||||
|
||||
m_State.altitude_t = Altitude;
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setAirSpeed(double speed)
|
||||
void Cockpit::setAltitudeTarget(double Altitude)
|
||||
{
|
||||
m_State.airspeed = speed;
|
||||
if(Altitude > 99999) Altitude = 99999;
|
||||
else if(Altitude < (-9999)) Altitude = -9999;
|
||||
|
||||
m_Target.altitude = Altitude;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setAirSpeed(double speed,uint8_t flag)
|
||||
{
|
||||
m_State.AirspeedFlag = flag;
|
||||
|
||||
if(speed < 0) speed = 0;
|
||||
else if(speed > 999) speed = 999;
|
||||
m_State.airspeed_t = speed;
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setAirSpeedTarget(double speed, uint8_t flag)
|
||||
{
|
||||
Q_UNUSED(flag)
|
||||
|
||||
if(speed < 0) speed = 0;
|
||||
else if(speed > 999) speed = 999;
|
||||
|
||||
m_Target.airspeed = speed;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void Cockpit::setVerticalSpeed(double speed)
|
||||
{
|
||||
m_State.verticalspeed_t = speed;
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setVerticalSpeedTarget(double speed)
|
||||
{
|
||||
m_Target.verticalspeed = speed;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setXTrack(double value)
|
||||
{
|
||||
if(value > 9999) value = 9999;
|
||||
else if(value < (-9999)) value = -9999;
|
||||
|
||||
m_State.xtrack = value;
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setWP_dist(double value)
|
||||
{
|
||||
if(value > 9999) value = 9999;
|
||||
else if(value < (-9999)) value = -9999;
|
||||
|
||||
m_State.wp_dist = value;
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setAlt_err(double value)
|
||||
{
|
||||
if(value > 9999) value = 9999;
|
||||
else if(value < (-9999)) value = -9999;
|
||||
|
||||
m_State.alt_err = value;
|
||||
m_State.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::setGPS(QString str)
|
||||
{
|
||||
m_State.GPS = str;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setMode(QString str)
|
||||
{
|
||||
m_State.MODE = str;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setState(QString str)
|
||||
{
|
||||
m_State.STATE = str;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
void Cockpit::setAOA(qreal Value)
|
||||
{
|
||||
m_State.AOA = Value;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Cockpit::setLed(QColor LED)
|
||||
{
|
||||
m_Color.LedColor = LED;
|
||||
m_Target.isUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::paintEvent(QPaintEvent *)
|
||||
{
|
||||
qreal scale = 2500.0;
|
||||
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */
|
||||
painter.setRenderHint(QPainter::TextAntialiasing);
|
||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||
|
||||
painter.translate(width() / 2, 4* height() / 10); /* 坐标变换为窗体中心 */
|
||||
painter.translate(width() * H_pos / 100,height() * V_pos / 100); /* 坐标变换为窗体中心 */
|
||||
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
|
||||
painter.scale(side / scale, side / scale); /* 比例缩放 */
|
||||
painter.scale(side / Scale, side / Scale); /* 比例缩放 */
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
||||
//全局设置字体
|
||||
@@ -255,15 +588,21 @@ void Cockpit::paintEvent(QPaintEvent *)
|
||||
setPalette(QPalette(Qt::black)); //设置背景颜色
|
||||
setAutoFillBackground(true);//设置自动填充背景色
|
||||
|
||||
if(isNormalSize)
|
||||
{
|
||||
drawPitch(&painter);
|
||||
drawRoll(&painter);
|
||||
drawRollScale(&painter);
|
||||
drawLeftScale(&painter);
|
||||
drawRightScale(&painter);
|
||||
drawVRate(&painter);
|
||||
drawYawScale(&painter);
|
||||
drawTopStatuts(&painter);
|
||||
}
|
||||
else//简单显示
|
||||
{
|
||||
|
||||
drawPitch(&painter);
|
||||
drawRoll(&painter);
|
||||
drawRollScale(&painter);
|
||||
drawLeftScale(&painter);
|
||||
drawRightScale(&painter);
|
||||
drawVRate(&painter);
|
||||
drawYawScale(&painter);
|
||||
drawTopStatuts(&painter);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -371,7 +710,7 @@ void Cockpit::drawPitch(QPainter *painter)
|
||||
|
||||
//qDebug() << "tar_y" << tar_y;
|
||||
|
||||
tar_y = (tar_y > 475)?(475):((tar_y<-525)?(-525):(tar_y));
|
||||
tar_y = (tar_y > 475)?(475):((tar_y<-475)?(-475):(tar_y));
|
||||
|
||||
painter->translate(0,tar_y);
|
||||
|
||||
@@ -385,19 +724,19 @@ void Cockpit::drawPitch(QPainter *painter)
|
||||
painter->save();
|
||||
QPainterPath path;
|
||||
//画外面边框
|
||||
path.moveTo(-4000,-4000);
|
||||
path.lineTo( 4000,-4000);
|
||||
path.lineTo( 4000, 4000);
|
||||
path.lineTo(-4000, 4000);
|
||||
path.moveTo(-4100,-4100);
|
||||
path.lineTo( 4100,-4100);
|
||||
path.lineTo( 4100, 4100);
|
||||
path.lineTo(-4100, 4100);
|
||||
//画里面边框
|
||||
path.addRoundRect(-500,-500,1000,1000,20,20);
|
||||
//按照规则填充两个边框之间的部分
|
||||
path.setFillRule(Qt::OddEvenFill);
|
||||
|
||||
pen.setColor(Qt::black);
|
||||
painter->setPen(pen);
|
||||
painter->fillPath(path,Qt::black);
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
}
|
||||
|
||||
//画姿态roll
|
||||
@@ -542,8 +881,8 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
QFont font;
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(8);
|
||||
font.setPointSize(60);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPointSize(70);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -632,17 +971,30 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(15);
|
||||
|
||||
font.setPointSize(90);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
QString DacadeText = QString::number(qAbs(int(m_State.airspeed/10))); //设置十位以上
|
||||
QString UnitText = QString::number(qAbs(int(m_State.airspeed)%10)); //设置个位
|
||||
|
||||
|
||||
qreal Unit = m_State.airspeed - int(m_State.airspeed)/10 * 10;
|
||||
qreal Decimal = m_State.airspeed - int(m_State.airspeed);
|
||||
|
||||
|
||||
QString DacadeText; //设置十位以上
|
||||
|
||||
if(Unit > 9.5)
|
||||
{
|
||||
DacadeText = QString::number(qAbs(int((m_State.airspeed + 1)/10)));
|
||||
}
|
||||
else
|
||||
{
|
||||
DacadeText = QString::number(qAbs(int(m_State.airspeed/10)));
|
||||
}
|
||||
|
||||
//显示10位
|
||||
if((m_State.airspeed < 0)&&(m_State.airspeed > -10))
|
||||
{
|
||||
@@ -654,12 +1006,8 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
//qDebug() << DacadeText;
|
||||
}
|
||||
|
||||
|
||||
qreal Unit = m_State.airspeed - int(m_State.airspeed)/10 * 10;
|
||||
qreal Decimal = m_State.airspeed - int(m_State.airspeed);
|
||||
|
||||
//qDebug() << Unit << Decimal;
|
||||
|
||||
//显示个位
|
||||
int count = 1;
|
||||
for(int i = -1.5 - Unit;i<(1.5 - Unit);i+=1)
|
||||
{
|
||||
@@ -674,7 +1022,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(15);
|
||||
font.setPointSize(90);
|
||||
font.setPixelSize(120);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -685,7 +1033,6 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
else
|
||||
painter->translate(150,(i + Unit) * 120 + 60);
|
||||
|
||||
//qDebug() << "Unit" << Unit;
|
||||
|
||||
//此段程序在未理解之前,请不要随意修改(负数未解决)
|
||||
switch (count) {
|
||||
@@ -738,10 +1085,6 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
}
|
||||
|
||||
count++;
|
||||
|
||||
|
||||
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
@@ -790,12 +1133,13 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
ePen.setColor(QColor("#FFFFFF"));
|
||||
ePen.setWidth(8);
|
||||
|
||||
font.setPixelSize(60);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawRect(0,600,300,100);
|
||||
painter->drawRect(0,600,300,150);
|
||||
|
||||
|
||||
QString AS_flag = "I";
|
||||
@@ -803,17 +1147,17 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
switch (m_State.AirspeedFlag) {
|
||||
default:
|
||||
case 0:
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"IAS " + QString::number(m_State.airspeed,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.airspeed,'f',0));
|
||||
AS_flag = "I";
|
||||
ePen.setColor(m_Color.NoticeColor);
|
||||
break;
|
||||
case 1:
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"CAS " + QString::number(m_State.airspeed,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.airspeed,'f',0));
|
||||
AS_flag = "C";
|
||||
ePen.setColor(m_Color.NoticeColor);
|
||||
break;
|
||||
case 2:
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"TAS " + QString::number(m_State.airspeed,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.airspeed,'f',0));
|
||||
AS_flag = "T";
|
||||
ePen.setColor(m_Color.NormalColor);
|
||||
break;
|
||||
@@ -821,7 +1165,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
ePen.setWidth(15);
|
||||
font.setPixelSize(100);
|
||||
font.setBold(true);//加粗
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -835,8 +1179,10 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
ePen.setWidth(15);
|
||||
font.setPixelSize(100);
|
||||
font.setPixelSize(120);
|
||||
font.setFamily("Arial");//非衬线
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -857,8 +1203,8 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(0,-820,300,120),Qt::AlignLeft|Qt::AlignVCenter,"OL " +QString::number(m_Target.airspeed,'f',0));
|
||||
painter->drawText(QRect(0,-920,300,120),Qt::AlignLeft|Qt::AlignVCenter,"AOA " +QString::number(m_Target.airspeed,'f',0));
|
||||
painter->drawText(QRect(0,-820,300,120),Qt::AlignLeft|Qt::AlignVCenter,"OL " +QString::number(m_State.OL,'f',0));
|
||||
painter->drawText(QRect(0,-920,300,120),Qt::AlignLeft|Qt::AlignVCenter,"AOA " +QString::number(m_State.AOA,'f',0));
|
||||
|
||||
painter->restore();//画顶部过载值和迎角结束
|
||||
|
||||
@@ -902,9 +1248,9 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
QFont font;
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPointSize(60);
|
||||
font.setPixelSize(90);
|
||||
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -912,10 +1258,8 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
if((i%100) == 0)
|
||||
{
|
||||
|
||||
painter->drawLine(0,i * h,40,i * h);
|
||||
painter->drawText(QRect(50,i * h - 30,240,80),Qt::AlignVCenter|Qt::AlignRight, strText);
|
||||
|
||||
painter->drawText(QRect(50,i * h - 75,240,150),Qt::AlignVCenter|Qt::AlignRight, strText);
|
||||
}
|
||||
else if((i%50) == 0)
|
||||
{
|
||||
@@ -969,14 +1313,14 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
ePen.setWidth(15);
|
||||
|
||||
font.setPixelSize(100);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(0,-720,310,100),Qt::AlignRight|Qt::AlignVCenter,QString::number(m_Target.altitude,'f',0));
|
||||
painter->drawText(QRect(0,-720,300,120),Qt::AlignRight|Qt::AlignVCenter,QString::number(m_Target.altitude,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -987,17 +1331,17 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
ePen.setWidth(8);
|
||||
|
||||
|
||||
font.setPixelSize(60);
|
||||
font.setPixelSize(120);
|
||||
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawRect(0,600,300,100);
|
||||
painter->drawRect(0,600,300,150);
|
||||
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_State.altitude,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.altitude,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -1027,17 +1371,34 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPointSize(90);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
qreal Unit = m_State.altitude - int(m_State.altitude)/100 * 100;
|
||||
//qreal Dacade = qreal(int(m_State.altitude)%100)/10.0;
|
||||
//qreal Decimal = m_State.altitude - int(m_State.altitude);
|
||||
|
||||
QString thousandText = QString::number(qAbs(int(m_State.altitude/1000)));//设置千位以上
|
||||
QString HundredText = QString::number(qAbs(int(m_State.altitude/100)%10));//设置百位
|
||||
QString DacadeText = QString::number(int(m_State.altitude/10)); //设置十位
|
||||
QString UnitText = QString::number(qAbs(int(m_State.altitude)%10)); //设置个位
|
||||
QString HundredText;//设置百位
|
||||
//QString DacadeText = QString::number(int(m_State.altitude/10)); //设置十位
|
||||
//QString UnitText = QString::number(qAbs(int(m_State.altitude)%10)); //设置个位
|
||||
|
||||
if(Unit > 99.5)
|
||||
{
|
||||
HundredText = QString::number(qAbs(int(m_State.altitude/100)%10) + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
HundredText = QString::number(qAbs(int(m_State.altitude/100)%10));
|
||||
}
|
||||
|
||||
//qDebug() << thousandText << HundredText << Unit;
|
||||
|
||||
//写千位
|
||||
if(m_State.altitude >= 0)
|
||||
@@ -1061,7 +1422,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPointSize(90);
|
||||
font.setPixelSize(120);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(160,-50,90,100),Qt::AlignVCenter|Qt::AlignRight, thousandText);
|
||||
@@ -1077,10 +1438,13 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPointSize(70);
|
||||
font.setPixelSize(120);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
//写百位
|
||||
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, HundredText);
|
||||
/*
|
||||
if(int(qAbs(m_State.altitude/100)) > 0)//说明有数
|
||||
{
|
||||
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, HundredText);
|
||||
@@ -1089,13 +1453,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
{
|
||||
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, "0");
|
||||
}
|
||||
|
||||
|
||||
qreal Unit = m_State.altitude - int(m_State.altitude)/100 * 100;
|
||||
qreal Dacade = qreal(int(m_State.altitude)%100)/10.0;
|
||||
|
||||
qreal Decimal = m_State.altitude - int(m_State.altitude);
|
||||
//float m_Unit =qAbs(Dacade - int(Dacade));
|
||||
*/
|
||||
|
||||
|
||||
//写十个位
|
||||
@@ -1133,7 +1491,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPointSize(70);
|
||||
font.setPixelSize(100);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -1223,8 +1581,8 @@ void Cockpit::drawVRate(QPainter *painter)
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(Qt::white);
|
||||
font.setPointSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(80);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -1315,14 +1673,14 @@ void Cockpit::drawVRate(QPainter *painter)
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
font.setPointSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(-80,-550,120,60),Qt::AlignHCenter|Qt::AlignLeft,QString::number(m_Target.verticalspeed,'f',(qAbs(m_Target.verticalspeed) < 10.0)?(1):(0)));
|
||||
painter->drawText(QRect(-80,-600,300,150),Qt::AlignVCenter|Qt::AlignLeft,QString::number(m_Target.verticalspeed,'f',(qAbs(m_Target.verticalspeed) < 10.0)?(1):(0)));
|
||||
|
||||
painter->restore();//画目标值结束
|
||||
|
||||
@@ -1334,14 +1692,14 @@ void Cockpit::drawVRate(QPainter *painter)
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_Color.CurrentColor);
|
||||
font.setPointSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
//在下方显示当前值
|
||||
painter->drawText(QRect(-80,500,120,60),Qt::AlignHCenter|Qt::AlignLeft,QString::number(m_State.verticalspeed,'f',(qAbs(m_State.verticalspeed) < 10.0)?(1):(0)));
|
||||
painter->drawText(QRect(-80,450,300,150),Qt::AlignVCenter|Qt::AlignLeft,QString::number(m_State.verticalspeed,'f',(qAbs(m_State.verticalspeed) < 10.0)?(1):(0)));
|
||||
|
||||
painter->restore();//画当前值结束
|
||||
|
||||
@@ -1393,8 +1751,10 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
//画顶部紫色目标值 (紫色在白色下面,并且在刻度上面,并且有一部分会重叠)
|
||||
painter->save();
|
||||
//旋转
|
||||
painter->rotate(m_Target.yaw - m_State.yaw);
|
||||
|
||||
float rotate_deg = -(m_State.yaw - m_Target.yaw);
|
||||
int n = rotate_deg/360;
|
||||
rotate_deg = rotate_deg - n*360;
|
||||
painter->rotate(rotate_deg);
|
||||
static const QPointF Tarpoint[8] = {
|
||||
QPointF(-40,-500),
|
||||
QPointF(-40,-530),
|
||||
@@ -1416,6 +1776,29 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画中间大罗盘
|
||||
painter->save();
|
||||
painter->rotate(-m_State.yaw);
|
||||
|
||||
static const QPointF Npoints[3] = {
|
||||
QPointF(-70,0),
|
||||
QPointF( 0,-300),
|
||||
QPointF( 70,0)};
|
||||
static const QPointF Spoints[3] = {
|
||||
QPointF(-70,0),
|
||||
QPointF( 0,300),
|
||||
QPointF( 70,0)};
|
||||
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(QColor("#FF0000"));
|
||||
painter->drawPolygon(Npoints,3);
|
||||
|
||||
painter->setBrush(QColor("#0000FF"));
|
||||
painter->drawPolygon(Spoints,3);
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画一个中间小飞机
|
||||
painter->save();
|
||||
|
||||
@@ -1463,25 +1846,25 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->save();
|
||||
painter->translate(i*100,0);
|
||||
|
||||
painter->drawEllipse(-5,-5,10,10);
|
||||
painter->drawEllipse(-8,-8,16,16);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
painter->translate(0,i*100);
|
||||
|
||||
painter->drawEllipse(-5,-5,10,10);
|
||||
painter->drawEllipse(-8,-8,16,16);
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
//画竖条
|
||||
painter->save();
|
||||
if(abs(m_State.distofly) >= 10)//大于10,对数显示
|
||||
if(abs(m_State.xtrack) >= 10)//大于10,对数显示
|
||||
{
|
||||
painter->translate(((m_State.distofly >= 0)?(1.0):(-1.0))*log10(abs(m_State.distofly)) * 100,0);
|
||||
painter->translate(((m_State.xtrack >= 0)?(1.0):(-1.0))*log10(abs(m_State.xtrack)) * 100,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->translate(m_State.distofly * 10.0,0);//小于10,线性 显示
|
||||
painter->translate(m_State.xtrack * 10.0,0);//小于10,线性 显示
|
||||
}
|
||||
|
||||
ePen.setWidth(8);
|
||||
@@ -1492,13 +1875,13 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
|
||||
|
||||
painter->save();//画横条开始
|
||||
if(abs(m_State.distofly) >= 10)//大于10,对数显示
|
||||
if(abs(m_State.alt_err) >= 10)//大于10,对数显示
|
||||
{
|
||||
painter->translate(0,((m_State.distofly >= 0)?(1.0):(-1.0))*log10(abs(m_State.distofly)) * 100);
|
||||
painter->translate(0,((m_State.alt_err >= 0)?(1.0):(-1.0))*log10(abs(m_State.alt_err)) * 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->translate(0,m_State.distofly * 10.0);//小于10,线性 显示
|
||||
painter->translate(0,m_State.alt_err * 10.0);//小于10,线性 显示
|
||||
}
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
@@ -1515,10 +1898,10 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->save();
|
||||
|
||||
static const QPointF Rectpoints[4] = {
|
||||
QPointF(-90,-620),
|
||||
QPointF( 90,-620),
|
||||
QPointF( 90, -540),
|
||||
QPointF(-90, -540),
|
||||
QPointF(-120,-650),
|
||||
QPointF( 120,-650),
|
||||
QPointF( 120, -540),
|
||||
QPointF(-120, -540),
|
||||
};
|
||||
|
||||
ePen.setWidth(1);
|
||||
@@ -1528,17 +1911,18 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->drawPolygon(Rectpoints,4);
|
||||
|
||||
ePen.setColor(m_Color.CurrentColor);
|
||||
font.setPointSize(60);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(-90,-625,180,80),Qt::AlignCenter,QString::number(m_State.yaw,'f',0));
|
||||
painter->drawText(QRect(-90,-670,180,150),Qt::AlignCenter,QString::number(m_State.yaw,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
|
||||
font.setPointSize(60);
|
||||
font.setPixelSize(60);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -1565,15 +1949,21 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
QString Flag = "";
|
||||
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
|
||||
{
|
||||
painter->save();
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
Flag = "N";
|
||||
ePen.setColor(QColor("#FF0000"));
|
||||
painter->setPen(ePen);
|
||||
break;
|
||||
case 18:
|
||||
Flag = "E";
|
||||
break;
|
||||
case 36:
|
||||
Flag = "S";
|
||||
ePen.setColor(QColor("#0000FF"));
|
||||
painter->setPen(ePen);
|
||||
break;
|
||||
case 54:
|
||||
Flag = "W";
|
||||
@@ -1582,7 +1972,13 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
break;
|
||||
}
|
||||
|
||||
painter->drawText(QRect(-40,-450,80,80),Qt::AlignVCenter|Qt::AlignHCenter,Flag);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(-75,-470,150,150),Qt::AlignVCenter|Qt::AlignHCenter,Flag);
|
||||
painter->restore();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1633,29 +2029,17 @@ void Cockpit::drawTopStatuts(QPainter *painter)
|
||||
|
||||
//画大字
|
||||
ePen.setColor(m_Color.StatusColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPointSize(50);
|
||||
ePen.setWidth(12);
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(-530,10,320,80),Qt::AlignCenter,m_SPD_HOLD);
|
||||
painter->drawText(QRect(-160,10,320,80),Qt::AlignCenter,m_HDG_HOLD);
|
||||
painter->drawText(QRect( 210,10,320,80),Qt::AlignCenter,m_ALT_HOLD);
|
||||
|
||||
//画小字
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(5);
|
||||
font.setPointSize(30);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(-530,100,320,50),Qt::AlignCenter,m_SPD_HOLD);
|
||||
painter->drawText(QRect(-160,100,320,50),Qt::AlignCenter,m_HDG_HOLD);
|
||||
painter->drawText(QRect( 210,100,320,50),Qt::AlignCenter,m_ALT_HOLD);
|
||||
|
||||
painter->drawText(QRect(-550,0,365,150),Qt::AlignCenter,m_State.GPS);
|
||||
painter->drawText(QRect(-185,0,365,150),Qt::AlignCenter,m_State. MODE);
|
||||
painter->drawText(QRect( 185,0,365,150),Qt::AlignCenter,m_State.STATE);
|
||||
|
||||
painter->restore();//画状态结束
|
||||
|
||||
|
||||
Reference in New Issue
Block a user