draw yaw scale

This commit is contained in:
2020-01-02 20:28:45 +08:00
parent 6de6802830
commit 126c97bf96
4 changed files with 104 additions and 39 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ MainWindow::MainWindow(QWidget *parent)
copk = new Cockpit(this); copk = new Cockpit(this);
copk->setGeometry(this->width() - copk->width(),0,700,this->height()); copk->setGeometry(this->width() - copk->width(),0,900,this->height());
nav->setGeometry(0,0,50,this->height()); nav->setGeometry(0,0,50,this->height());
+103 -38
View File
@@ -76,7 +76,7 @@ void Cockpit::mousePressEvent(QMouseEvent *e)
m_c = this->pos(); m_c = this->pos();
setPitch(m_Attitude.pitch + e->x()); //setPitch(m_Attitude.pitch + e->x());
update(); update();
@@ -94,7 +94,9 @@ void Cockpit::wheelEvent(QWheelEvent *e)
setRoll(m_Attitude.roll + e->angleDelta().y()/120.0f); setRoll(m_Attitude.roll + e->angleDelta().y()/120.0f);
setPitch(m_Attitude.pitch + e->angleDelta().y()/120.0f); setPitch(m_Attitude.pitch + e->angleDelta().y()/120.0f);
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch; setYaw(m_Attitude.yaw + e->angleDelta().y()/120.0f);
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch << m_Attitude.yaw;
update(); update();
} }
@@ -215,7 +217,7 @@ void Cockpit::paintEvent(QPaintEvent *)
drawPitch(&painter); drawPitch(&painter);
drawRoll(&painter); drawRoll(&painter);
drawRollScale(&painter); drawRollScale(&painter);
//drawYawScale(&painter); drawYawScale(&painter);
//drawScale(&painter); //drawScale(&painter);
//drawCenterLine(&painter); //drawCenterLine(&painter);
//drawText(&painter); //drawText(&painter);
@@ -308,9 +310,9 @@ void Cockpit::drawRoll(QPainter *painter)
//画紫色小三角形 //画紫色小三角形
static const QPointF points1[3] = { static const QPointF points1[3] = {
QPointF(-50,-620), QPointF(-30,-630),
QPointF(0,-690), QPointF(0,-690),
QPointF(50,-620) QPointF(30,-630)
}; };
pen.setWidth(1); pen.setWidth(1);
@@ -322,9 +324,9 @@ void Cockpit::drawRoll(QPainter *painter)
//画白色小三角形 //画白色小三角形
static const QPointF points2[3] = { static const QPointF points2[3] = {
QPointF(-50,-800), QPointF(-30,-770),
QPointF(0,-710), QPointF(0,-710),
QPointF(50,-800) QPointF(30,-770)
}; };
pen.setWidth(1); pen.setWidth(1);
@@ -411,19 +413,19 @@ void Cockpit::drawRollScale(QPainter *painter)
if((i%10) == 0) if((i%10) == 0)
{ {
if(i!=0){ if((i!=0)&&(i != 20)){
painter->drawLine(-290,i * h,290,i * h); painter->drawLine(-290,i * h,290,i * h);
painter->drawText(-380,i * h + 30, strText);//减去字体的一半 painter->drawText(-380,i * h + 30, strText);//减去字体的一半
painter->drawText( 300,i * h + 30, strText); painter->drawText( 300,i * h + 30, strText);
} }
} }
else if((i%5) == 0) else if((i%5) == 0)
{ {
painter->drawLine(-100,i * h,100,i * h); painter->drawLine(-100,i * h,100,i * h);
painter->drawText(-180,i * h+ 30, strText); //painter->drawText(-180,i * h+ 30, strText);
painter->drawText( 110,i * h+ 30, strText); //painter->drawText( 110,i * h+ 30, strText);
} }
@@ -442,47 +444,110 @@ void Cockpit::drawYawScale(QPainter *painter)
painter->save(); painter->save();
//绘制Yaw QPen ePen;
QPen pen; //平移坐标
pen.setWidth(10); painter->translate(0,950);
pen.setColor(Qt::black);
painter->setPen(pen);
//计算出Yaw的范围 painter->save();
float YawLimitMin,YawLimitMax; //画一个半透明的基础圆
YawLimitMin = m_YawValue - 60; painter->setOpacity(0.3f);
if(YawLimitMin < 0)YawLimitMin += 360; ePen.setColor(QColor("#7A7A7A"));
painter->setBrush(QColor("#7A7A7A"));
painter->drawEllipse(-500,-500,1000,1000);
painter->restore();
YawLimitMax = m_YawValue + 60; painter->save();
if(YawLimitMin > 360)YawLimitMin -= 360; //画一个顶部三角形
painter->setOpacity(1.0f);
int CurrentYaw = m_YawValue; static const QPointF points[3] = {
CurrentYaw = CurrentYaw/10;//0~35 QPointF(-30,-560),
QPointF(0,-500),
QPointF(30,-560)
};
ePen.setWidth(1);
ePen.setColor(m_CurrentColor);
painter->setPen(ePen);
painter->setBrush(m_CurrentColor);
painter->drawPolygon(points,3);
painter->restore();
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
QFont font; QFont font;
font.setPixelSize(150); font.setPointSize(60);
painter->setPen(ePen);
painter->setFont(font); painter->setFont(font);
QString str; //旋转
painter->rotate(m_Attitude.yaw);
//画刻度
for(int i = YawLimitMin; i <= YawLimitMax; i+=5) for(int i=0;i<72;i++)
{ {
if(i%90 == 0) painter->save();
{
switch(i)
{
case 0 :{ str = "N"; }break;
case 90 :{ str = "E"; }break;
case 180 :{ str = "S"; }break;
case 270 :{ str = "W"; }break;
} painter->setOpacity(1.0f);
}
painter->translate(0,0);
painter->rotate(i * 5.0f);
if((i%2) == 0)
painter->drawLine(0,-500,0,-460);
else else
painter->drawLine(0,-500,0,-480);
if((i%6) == 0)
{ {
painter->drawLine((i - m_YawValue)*10,-900, (i - m_YawValue)*10, -850);
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
{
switch (i) {
case 0:
painter->drawText( -20,-380, "N");
break;
case 18:
painter->drawText( -20,-380, "E");
break;
case 36:
painter->drawText( -20,-380, "S");
break;
case 54:
painter->drawText( -20,-380, "W");
break;
default:
break;
}
}
else
{
QString strText = QString::number(qAbs(i/2));
if(strText.length() > 1)
{
painter->drawText( -40,-380, strText);
}
else
{
painter->drawText( -20,-380, strText);
}
}
} }
painter->restore();
} }
painter->restore(); painter->restore();
} }
Binary file not shown.
Binary file not shown.