完成了升降速率和顶部状态
This commit is contained in:
+335
-51
@@ -66,7 +66,12 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
m_StatusColor = QColor("#00FF00");
|
||||
|
||||
|
||||
m_WColor = QColor("#458B00");
|
||||
m_WColor = QColor("#000000");
|
||||
|
||||
|
||||
m_SPD_HOLD = "V/S";
|
||||
m_HDG_HOLD = "HDG_HOLD";
|
||||
m_ALT_HOLD = "SPD_HOLD";
|
||||
|
||||
|
||||
//setMinimumSize(QSize(10, 10));
|
||||
@@ -76,22 +81,24 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
|
||||
|
||||
//初始化完成后打开定时器开始计数刷新
|
||||
UpdateTimer = new QTimer;
|
||||
//UpdateTimer = new QTimer;
|
||||
|
||||
connect(UpdateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(UpdateTimeout()));
|
||||
//connect(UpdateTimer,SIGNAL(timeout()),
|
||||
// this,SLOT(UpdateTimeout()));
|
||||
|
||||
UpdateTimer->start(1000);
|
||||
//UpdateTimer->start(1000);
|
||||
|
||||
}
|
||||
|
||||
Cockpit::~Cockpit()
|
||||
{
|
||||
/*
|
||||
if(UpdateTimer->isActive())
|
||||
{
|
||||
UpdateTimer->stop();
|
||||
UpdateTimer->deleteLater();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
@@ -111,13 +118,6 @@ void Cockpit::mouseReleaseEvent(QMouseEvent *e)
|
||||
void Cockpit::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
qDebug() << "press" << e;
|
||||
m_LedColor = Qt::blue;
|
||||
|
||||
m_c = this->pos();
|
||||
|
||||
//setPitch(m_Attitude.pitch + e->x());
|
||||
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -138,16 +138,22 @@ void Cockpit::wheelEvent(QWheelEvent *e)
|
||||
setAirSpeed(m_Attitude.airspeed +0.1f * e->angleDelta().y()/120.0f);
|
||||
setGPSAltitude(m_GPS.altitude + 5.2f * e->angleDelta().y()/120.0f);
|
||||
|
||||
m_Target.altitude = 60;
|
||||
m_Target.altitude += 120* e->angleDelta().y()/120.0f;;
|
||||
|
||||
m_Target.airspeed = 20;//0.1f * e->angleDelta().y()/120.0f;
|
||||
m_Target.airspeed += 0.5f * e->angleDelta().y()/120.0f;;//0.1f * e->angleDelta().y()/120.0f;
|
||||
|
||||
m_Target.pitch += 0.2f * e->angleDelta().y()/120.0f;;
|
||||
|
||||
m_Target.yaw += 0.2f * e->angleDelta().y()/120.0f;
|
||||
|
||||
|
||||
m_Attitude.distofly += 0.2f * e->angleDelta().y()/120.0f;
|
||||
|
||||
m_Target.verticalspeed += 0.1f * e->angleDelta().y()/120.0f;
|
||||
|
||||
m_Attitude.verticalspeed += 0.2f * e->angleDelta().y()/120.0f;
|
||||
|
||||
|
||||
//qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch << m_Attitude.yaw << m_Target.airspeed;
|
||||
|
||||
update();
|
||||
@@ -258,14 +264,16 @@ void Cockpit::setLed(QColor LED)
|
||||
|
||||
void Cockpit::paintEvent(QPaintEvent *)
|
||||
{
|
||||
float scale = 2500.0f;
|
||||
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */
|
||||
painter.setRenderHint(QPainter::TextAntialiasing);
|
||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||
|
||||
painter.translate(width() / 2, 2* height() / 6); /* 坐标变换为窗体中心 */
|
||||
painter.translate(width() / 2, 4* height() / 10); /* 坐标变换为窗体中心 */
|
||||
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
|
||||
painter.scale(side / 2000.0, side / 2000.0); /* 比例缩放 */
|
||||
painter.scale(side / scale, side / scale); /* 比例缩放 */
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
||||
//全局设置字体
|
||||
@@ -285,8 +293,12 @@ void Cockpit::paintEvent(QPaintEvent *)
|
||||
drawLeftScale(&painter);
|
||||
drawRightScale(&painter);
|
||||
|
||||
drawVRate(&painter);
|
||||
|
||||
drawYawScale(&painter);
|
||||
|
||||
drawTopStatuts(&painter);
|
||||
|
||||
//drawCenterLine(&painter);
|
||||
//drawText(&painter);
|
||||
//drawGPS(&painter);
|
||||
@@ -380,6 +392,68 @@ void Cockpit::drawPitch(QPainter *painter)
|
||||
}
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
|
||||
//中间 两块黑块
|
||||
static const QPointF points1[6] = {
|
||||
QPointF(-475, 0),
|
||||
QPointF(-275, 0),
|
||||
QPointF(-275, 50),
|
||||
QPointF(-300, 50),
|
||||
QPointF(-300, 25),
|
||||
QPointF(-475, 25)
|
||||
};
|
||||
static const QPointF points2[6] = {
|
||||
QPointF(475, 0),
|
||||
QPointF(275, 0),
|
||||
QPointF(275, 50),
|
||||
QPointF(300, 50),
|
||||
QPointF(300, 25),
|
||||
QPointF(475, 25)
|
||||
};
|
||||
|
||||
QPen pen;
|
||||
pen.setWidth(10);
|
||||
pen.setColor(m_CurrentColor);
|
||||
painter->setPen(pen);
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawPolygon(points1, 6);
|
||||
painter->drawPolygon(points2, 6);
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画目标值
|
||||
painter->save();
|
||||
|
||||
float tar_y = (m_Attitude.pitch - m_Target.pitch)/45.0f * 1000;
|
||||
|
||||
//qDebug() << "tar_y" << tar_y;
|
||||
|
||||
tar_y = (tar_y > 475)?(475):((tar_y<-525)?(-525):(tar_y));
|
||||
|
||||
painter->translate(0,tar_y);
|
||||
|
||||
static const QPointF PitchPoints_L[4] = {
|
||||
QPointF(-275, 0),
|
||||
QPointF(-300, 0),
|
||||
QPointF(-300, 50),
|
||||
QPointF(-275, 50),
|
||||
};
|
||||
static const QPointF PitchPoints_R[4] = {
|
||||
QPointF( 275, 0),
|
||||
QPointF( 300, 0),
|
||||
QPointF( 300, 50),
|
||||
QPointF( 275, 50),
|
||||
};
|
||||
|
||||
pen.setWidth(10);
|
||||
pen.setColor(m_TargetColor);
|
||||
painter->setPen(pen);
|
||||
//painter->setBrush(m_TargetColor);
|
||||
painter->drawPolygon(PitchPoints_L,4);
|
||||
painter->drawPolygon(PitchPoints_R,4);
|
||||
painter->restore();
|
||||
|
||||
//画黑色背景
|
||||
painter->save();
|
||||
@@ -411,20 +485,31 @@ void Cockpit::drawRoll(QPainter *painter)
|
||||
painter->rotate(m_Attitude.roll);
|
||||
//画绿色W和顶部滚转
|
||||
static const QPointF W_Line[7] = {
|
||||
QPointF(-300, 0),
|
||||
QPointF(-150, 0),
|
||||
QPointF(-100, 0),
|
||||
QPointF(-50, 100),
|
||||
QPointF( 0,0),
|
||||
QPointF( 50, 100),
|
||||
QPointF( 100, 0),
|
||||
QPointF( 300, 0)
|
||||
QPointF( 150, 0)
|
||||
};
|
||||
|
||||
QPen pen;
|
||||
pen.setWidth(10);
|
||||
pen.setColor(m_WColor);
|
||||
|
||||
pen.setCapStyle(Qt::RoundCap);
|
||||
pen.setWidth(30);
|
||||
pen.setColor(m_CentreLineColor);
|
||||
painter->setPen(pen);
|
||||
painter->drawPolyline(W_Line,7);
|
||||
|
||||
|
||||
pen.setWidth(10);
|
||||
pen.setColor(m_WColor);
|
||||
|
||||
|
||||
painter->setPen(pen);
|
||||
painter->drawPolyline(W_Line,7);
|
||||
|
||||
//画白色小三角形
|
||||
static const QPointF points2[3] = {
|
||||
QPointF(-30,-500),
|
||||
@@ -475,31 +560,6 @@ void Cockpit::drawRollScale(QPainter *painter)
|
||||
painter->setFont(font);
|
||||
painter->drawArc(-450,-450,900,900,30*16,120*16);
|
||||
|
||||
//中间 两块黑块
|
||||
|
||||
static const QPointF points1[6] = {
|
||||
QPointF(-475, 0),
|
||||
QPointF(-275, 0),
|
||||
QPointF(-275, 50),
|
||||
QPointF(-300, 50),
|
||||
QPointF(-300, 25),
|
||||
QPointF(-475, 25)
|
||||
};
|
||||
static const QPointF points2[6] = {
|
||||
QPointF(475, 0),
|
||||
QPointF(275, 0),
|
||||
QPointF(275, 50),
|
||||
QPointF(300, 50),
|
||||
QPointF(300, 25),
|
||||
QPointF(475, 25)
|
||||
};
|
||||
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawPolygon(points1, 6);
|
||||
painter->drawPolygon(points2, 6);
|
||||
|
||||
|
||||
|
||||
|
||||
//大刻度盘
|
||||
for(int i = -60;i<=60;i+=10)
|
||||
@@ -807,8 +867,22 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
painter->restore();
|
||||
|
||||
//画顶部的目标值
|
||||
painter->save();
|
||||
|
||||
painter->restore();
|
||||
ePen.setColor(m_TargetColor);
|
||||
ePen.setWidth(15);
|
||||
font.setPixelSize(100);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(0,-720,300,120),Qt::AlignRight|Qt::AlignVCenter,QString::number(m_Target.airspeed,'f',0));
|
||||
|
||||
painter->restore();//画顶部目标值结束
|
||||
|
||||
painter->restore();//全部结束
|
||||
|
||||
}
|
||||
|
||||
@@ -909,6 +983,22 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
painter->restore();
|
||||
|
||||
//画顶部目标值
|
||||
painter->save();
|
||||
ePen.setColor(m_TargetColor);
|
||||
ePen.setWidth(15);
|
||||
|
||||
font.setPixelSize(100);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(0,-720,330,100),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_Target.altitude,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画最底下的黑色单位显示框
|
||||
painter->save();
|
||||
@@ -926,7 +1016,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawRect(0,600,300,100);
|
||||
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_GPS.altitude));
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_GPS.altitude,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -995,7 +1085,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(160,-50,90,100),Qt::AlignVCenter|Qt::AlignRight, thousandText);
|
||||
qDebug() << "THOUN";
|
||||
//qDebug() << "THOUN";
|
||||
}
|
||||
}
|
||||
else if(int(m_GPS.altitude/1000) < 0)
|
||||
@@ -1199,6 +1289,163 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Cockpit::drawVRate(QPainter *painter)
|
||||
{
|
||||
painter->save();
|
||||
//平移坐标
|
||||
painter->translate(950,0);
|
||||
|
||||
QPen ePen;
|
||||
QFont font;
|
||||
//画一个半透明的小方块
|
||||
painter->save();
|
||||
painter->setOpacity(0.3f);
|
||||
|
||||
static const QPointF Backpoints[10] = {
|
||||
QPointF( 80,-150),
|
||||
QPointF( 0,-200),
|
||||
QPointF( 0,-460),
|
||||
QPointF( 110,-460),
|
||||
QPointF( 200,-250),
|
||||
|
||||
QPointF( 200, 250),
|
||||
QPointF( 110, 460),
|
||||
QPointF( 0, 460),
|
||||
QPointF( 0, 200),
|
||||
QPointF( 80, 150),
|
||||
};
|
||||
painter->setBrush(QColor("#7A7A7A"));
|
||||
painter->drawPolygon(Backpoints,10);
|
||||
painter->restore();//画底部结束
|
||||
|
||||
//画刻度
|
||||
painter->save();
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(Qt::white);
|
||||
painter->setPen(ePen);
|
||||
|
||||
for(int i = -7;i <= 7;i++)
|
||||
{
|
||||
painter->save();
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(Qt::white);
|
||||
font.setPointSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
|
||||
painter->translate(80,((i<0)?(-1):(1))*log10(qAbs(i)) * 500);
|
||||
|
||||
if(i == 0)
|
||||
{
|
||||
painter->drawLine(0,0,40,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->drawLine(0,0,20,0);
|
||||
}
|
||||
|
||||
|
||||
if((qAbs(i)%2) == 1)
|
||||
{
|
||||
if(qAbs(i) != 1)//除去0位置
|
||||
{
|
||||
painter->drawText(QRect(-80,-40,60,80),Qt::AlignCenter,QString::number(qAbs(i)-1));
|
||||
}
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
painter->restore();//画刻度结束
|
||||
|
||||
//画当前值
|
||||
painter->save();
|
||||
painter->translate(80,0);
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_CurrentColor);
|
||||
painter->setPen(ePen);
|
||||
|
||||
float cur_y = ((m_Attitude.verticalspeed<0)?(1):(-1))*log10(qAbs(m_Attitude.verticalspeed) + 1) * 500;
|
||||
|
||||
cur_y = (cur_y < -440)?(-440):((cur_y>440)?(440):(cur_y));//位置限幅
|
||||
|
||||
painter->drawLine(0,cur_y,20,cur_y);
|
||||
painter->drawLine(20,cur_y,200,0);
|
||||
|
||||
//qDebug() << m_Attitude.verticalspeed;
|
||||
|
||||
painter->restore();//画当前值结束
|
||||
|
||||
//画当前值打补丁
|
||||
painter->save();
|
||||
painter->translate(200,0);
|
||||
|
||||
painter->setBrush(Qt::black);
|
||||
painter->drawRect(0,-250,100,500);
|
||||
|
||||
painter->restore();//画当前值结束
|
||||
|
||||
|
||||
|
||||
//画目标标尺
|
||||
painter->save();
|
||||
|
||||
float tar_y = ((m_Target.verticalspeed<0)?(1):(-1))*log10(qAbs(m_Target.verticalspeed) + 1) * 500;
|
||||
|
||||
tar_y = (tar_y < -440)?(-440):((tar_y>440)?(440):(tar_y));//位置限幅
|
||||
|
||||
painter->translate(80,tar_y);//+1是应为log 1= 0,偏移0的位置
|
||||
|
||||
//qDebug() << m_Target.verticalspeed;
|
||||
|
||||
static const QPointF Tarpoints[4] = {
|
||||
QPointF( -8,-8),
|
||||
QPointF( 28,-8),
|
||||
QPointF( 28, 8),
|
||||
QPointF( -8, 8)
|
||||
};
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_TargetColor);
|
||||
painter->setPen(ePen);
|
||||
painter->drawPolygon(Tarpoints,4);
|
||||
|
||||
painter->restore();//画目标标尺结束
|
||||
|
||||
//画目标值
|
||||
painter->save();
|
||||
|
||||
painter->translate(80,0);//+1是应为log 1= 0,偏移0的位置
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_TargetColor);
|
||||
font.setPointSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
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->restore();//画目标值结束
|
||||
|
||||
|
||||
|
||||
painter->restore();//全部结束
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//画航向(位于底部的一个圈)
|
||||
void Cockpit::drawYawScale(QPainter *painter)
|
||||
{
|
||||
@@ -1306,8 +1553,8 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->save();
|
||||
|
||||
static const QPointF Rectpoints[4] = {
|
||||
QPointF(-90,-610),
|
||||
QPointF( 90,-610),
|
||||
QPointF(-90,-620),
|
||||
QPointF( 90,-620),
|
||||
QPointF( 90, -540),
|
||||
QPointF(-90, -540),
|
||||
};
|
||||
@@ -1322,7 +1569,7 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
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->drawText(QRect(-90,-625,180,80),Qt::AlignCenter,QString::number(m_Attitude.yaw,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -1441,4 +1688,41 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->restore();//画YAW结束
|
||||
}
|
||||
|
||||
void Cockpit::drawTopStatuts(QPainter *painter)
|
||||
{
|
||||
//画状态开始
|
||||
painter->save();
|
||||
|
||||
QPen ePen;
|
||||
QFont font;
|
||||
|
||||
painter->translate(0,-900);
|
||||
|
||||
//画底层
|
||||
painter->save();
|
||||
painter->setOpacity(0.3f);
|
||||
painter->setBrush(QColor("#7A7A7A"));
|
||||
|
||||
painter->drawRect(-550,0,1100,150);
|
||||
|
||||
painter->setOpacity(1);
|
||||
ePen.setColor(m_TargetColor);
|
||||
ePen.setWidth(10);
|
||||
painter->setPen(ePen);
|
||||
painter->drawLine(-185,0,-185,150);
|
||||
painter->drawLine( 185,0, 185,150);
|
||||
painter->restore();//画底层结束
|
||||
|
||||
//画状态
|
||||
painter->save();
|
||||
|
||||
ePen.setColor(m_StatusColor);
|
||||
ePen.setWidth(10);
|
||||
painter->setPen(ePen);
|
||||
painter->drawRect(-530,10,320,80);
|
||||
painter->drawRect(-160,10,320,80);
|
||||
painter->drawRect( 210,10,320,80);
|
||||
painter->restore();//画状态结束
|
||||
|
||||
painter->restore();//所有结束
|
||||
}
|
||||
|
||||
+10
-10
@@ -55,6 +55,8 @@ typedef struct {
|
||||
|
||||
float distofly;
|
||||
|
||||
|
||||
|
||||
}_attitude;
|
||||
|
||||
typedef struct {
|
||||
@@ -79,7 +81,7 @@ typedef struct{
|
||||
float position;//侧偏距
|
||||
float altitude;//海拔
|
||||
|
||||
|
||||
float verticalspeed;//纵向速度
|
||||
|
||||
}_target;
|
||||
|
||||
@@ -127,19 +129,13 @@ protected:
|
||||
void drawRoll(QPainter *painter);
|
||||
void drawRollScale(QPainter *painter);
|
||||
|
||||
void drawVRate(QPainter *painter);
|
||||
|
||||
void drawYawScale(QPainter *painter);
|
||||
void drawLeftScale(QPainter *painter);
|
||||
void drawRightScale(QPainter *painter);
|
||||
|
||||
void drawCenterLine(QPainter *painter);
|
||||
void drawText(QPainter *painter);
|
||||
void drawGPS(QPainter *painter);
|
||||
void drawHight(QPainter *painter);
|
||||
void drawSpeed(QPainter *painter);
|
||||
void drawBattery(QPainter *painter);
|
||||
|
||||
|
||||
void drawLowPanel(QPainter *painter);
|
||||
void drawTopStatuts(QPainter *painter);
|
||||
|
||||
private slots:
|
||||
|
||||
@@ -155,6 +151,10 @@ private:
|
||||
|
||||
QString m_mode;//显示模式
|
||||
|
||||
QString m_SPD_HOLD;
|
||||
QString m_HDG_HOLD;
|
||||
QString m_ALT_HOLD;
|
||||
|
||||
|
||||
double m_PitchValue;
|
||||
double m_RollValue;
|
||||
|
||||
Reference in New Issue
Block a user