draw speed scale

This commit is contained in:
2020-01-03 16:59:44 +08:00
parent 126c97bf96
commit 12717eee0c
3 changed files with 228 additions and 117 deletions
+3 -1
View File
@@ -22,7 +22,7 @@ MainWindow::MainWindow(QWidget *parent)
copk = new Cockpit(this);
copk->setGeometry(this->width() - copk->width(),0,900,this->height());
copk->setGeometry(this->width() - copk->width(),0,1000,this->height());
nav->setGeometry(0,0,50,this->height());
@@ -90,6 +90,8 @@ void MainWindow::resizeEvent(QResizeEvent *e)
{
qDebug() << e;
nav->setGeometry(0,0,50,this->height());
copk->setGeometry(this->width() - copk->width(),0,copk->width(),copk->height());
map->setGeometry(nav->width(),
+208 -114
View File
@@ -37,6 +37,9 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
m_Attitude.horizontalspeed = 0;//侧滑速度
m_Attitude.verticalspeed = 0;//爬升速度
m_Battery.current[0] = 0;
m_Battery.voltage[0] = 0;
@@ -91,10 +94,12 @@ void Cockpit::wheelEvent(QWheelEvent *e)
{
qDebug() << "wheel event" << e;
setRoll(m_Attitude.roll + e->angleDelta().y()/120.0f);
setPitch(m_Attitude.pitch + e->angleDelta().y()/120.0f);
setRoll(m_Attitude.roll +0.1f * e->angleDelta().y()/120.0f);
setPitch(m_Attitude.pitch +0.1f * e->angleDelta().y()/120.0f);
setYaw(m_Attitude.yaw + e->angleDelta().y()/120.0f);
setYaw(m_Attitude.yaw +0.1f * e->angleDelta().y()/120.0f);
setAirSpeed(m_Attitude.airspeed +0.1f * e->angleDelta().y()/120.0f);
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch << m_Attitude.yaw;
@@ -218,7 +223,7 @@ void Cockpit::paintEvent(QPaintEvent *)
drawRoll(&painter);
drawRollScale(&painter);
drawYawScale(&painter);
//drawScale(&painter);
drawLeftScale(&painter);
//drawCenterLine(&painter);
//drawText(&painter);
//drawGPS(&painter);
@@ -270,9 +275,51 @@ void Cockpit::drawPitch(QPainter *painter)
painter->setBrush(m_GroundColor);
painter->drawRect(yellowrect);
//painter->setBrush(QColor("#FFFFFF"));
//painter->drawRect(whiterect);
//painter->drawRect(whiterect)
//俯仰刻度表
float h = 1000.0f/45.0f;//单位高度
for(int i = -20 - m_Attitude.pitch;i<=(15 - m_Attitude.pitch);i+=1)
{
QString strText = QString::number(qAbs(i)); //设置当前字体
painter->save();
QPen ePen;
ePen.setColor(m_CentreLineColor);
ePen.setWidth(10);
QFont font;
font.setPointSize(60);
painter->setPen(ePen);
painter->setFont(font);
if((i%10) == 0)
{
painter->drawLine(-290,i * h,290,i * h);
painter->drawText(-380,i * h + 30, strText);//减去字体的一半
painter->drawText( 300,i * h + 30, strText);
}
else if((i%5) == 0)
{
//painter->drawLine(-50,(i - 2.5f)*h,50,(i - 2.5f)*h);
painter->drawLine(-150,i * h,150,i * h);
//painter->drawLine(-50,(i + 2.5f)*h,50,(i + 2.5f)*h);
}
painter->restore();
}
//俯仰刻度线
painter->restore();
@@ -288,10 +335,10 @@ void Cockpit::drawRoll(QPainter *painter)
static const QPointF W_Line[7] = {
QPointF(-350, 0),
QPointF(-300, 0),
QPointF(-100, 0),
QPointF(-50, 100),
QPointF( 0,-100),
QPointF( 0,0),
QPointF( 50, 100),
QPointF( 100, 0),
QPointF( 300, 0)
@@ -395,46 +442,6 @@ void Cockpit::drawRollScale(QPainter *painter)
//painter->drawText(-30,-750, strText);
painter->restore();
}
m_Max_Roll = m_RollValue + 60;
m_Min_Roll = m_RollValue - 60;
//俯仰刻度表
float h = 1000.0f/45.0f;//单位高度
for(int i = -20;i<=20;i+=1)
{
QString strText = QString::number(qAbs(i)); //设置当前字体
painter->save();
if((i%10) == 0)
{
if((i!=0)&&(i != 20)){
painter->drawLine(-290,i * h,290,i * h);
painter->drawText(-380,i * h + 30, strText);//减去字体的一半
painter->drawText( 300,i * h + 30, strText);
}
}
else if((i%5) == 0)
{
painter->drawLine(-100,i * h,100,i * h);
//painter->drawText(-180,i * h+ 30, strText);
//painter->drawText( 110,i * h+ 30, strText);
}
painter->restore();
}
painter->restore();
}
@@ -458,7 +465,7 @@ void Cockpit::drawYawScale(QPainter *painter)
painter->save();
//画一个顶部三角形
painter->setOpacity(1.0f);
//painter->setOpacity(1.0f);
static const QPointF points[3] = {
QPointF(-30,-560),
@@ -486,7 +493,7 @@ void Cockpit::drawYawScale(QPainter *painter)
painter->setFont(font);
//旋转
painter->rotate(m_Attitude.yaw);
painter->rotate(-m_Attitude.yaw);
//画刻度
for(int i=0;i<72;i++)
@@ -504,7 +511,6 @@ void Cockpit::drawYawScale(QPainter *painter)
if((i%6) == 0)
{
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
{
switch (i) {
@@ -528,8 +534,6 @@ void Cockpit::drawYawScale(QPainter *painter)
else
{
QString strText = QString::number(qAbs(i/2));
if(strText.length() > 1)
{
painter->drawText( -40,-380, strText);
@@ -543,84 +547,174 @@ void Cockpit::drawYawScale(QPainter *painter)
painter->restore();
}
painter->restore();
painter->restore();
}
//画刻度尺
void Cockpit::drawScale(QPainter *painter)
//画刻度尺
void Cockpit::drawLeftScale(QPainter *painter)
{
painter->save();
int steps = 30;
m_ForeColor = Qt::black;
painter->setPen(m_ForeColor);
QPen pen;
pen.setWidth(10);
painter->setPen(pen);
//平移坐标
painter->translate(-1100,0);
QPen ePen;
QFont font;
font.setPointSize(60);
//画一个半透明的小方块
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);
int C_Altitude;
C_Altitude = m_gps_altitude;
m_Max_Altitude = C_Altitude + 60;
m_Min_Altitude = C_Altitude - 60;
/*
//左边
painter->drawText(-920,-800,tr("海拔"));
//右边
painter->drawText( 760,-800,tr("速度"));
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"TAS " + QString::number(m_Attitude.airspeed));
for (int i = 0; i <= steps; i++)
{
if (i % 5 == 0)
{
//画两旁刻度
//左边
painter->drawLine(-820, 750-i*50, -740, 750-i*50);
painter->drawText(-950, 780-i*50,QString::number(m_Min_Altitude + i*(m_Max_Altitude - m_Min_Altitude)/steps));
//右边
painter->drawLine( 850, 750-i*50, 770, 750-i*50);
painter->drawText( 870, 780-i*50,QString::number(i*2));
}
else
{
//左边
painter->drawLine(-780, 750-i*50, -740, 750-i*50);
//右边
//painter->setOpacity(i/30.0f);
painter->drawLine( 810, 750-i*50, 770, 750-i*50);
}
}
*/
painter->restore();
//写中间的Pitch,roll,yaw的值
//画旁边的速度刻度,并显示
painter->save();
pen.setWidth(30);
pen.setColor(QColor("#030303"));
painter->setPen(pen);
font.setPointSize(120);
painter->setFont(font);
QRect PitchRect(-300,-90,600,180);
painter->drawText(PitchRect, Qt::AlignCenter,QString::number(m_Attitude.pitch,'f',1));
painter->translate(0,1200.0f/40.0f * m_Attitude.airspeed);
float h = 1200.0f/40.0f;//单位高度
for(int i = -19 - m_Attitude.airspeed;i<=(19 - m_Attitude.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(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;
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);
qDebug() << painter->window();
painter->drawText(QRect(200,(i + Unit) * 100 - 50,100,100),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->restore();
}
painter->restore();
QRect RollRect(-300,-500,600,180);
painter->drawText(RollRect, Qt::AlignCenter,QString::number(m_Attitude.roll,'f',1));
QRect YawRect(-300,-1000,600,180);
painter->drawText(YawRect, Qt::AlignCenter,QString::number(m_Attitude.yaw,'f',1));
painter->restore();
}
//画中间刻度
+17 -2
View File
@@ -57,6 +57,21 @@ typedef struct {
float current[10];
}_battery;
typedef struct{
float pitch;
float roll;
float yaw;
float height;
float airspeed;
float heading;//航线方向
float position;//侧偏距
}_target;
_gps m_GPS;
_battery m_Battery;
_attitude m_Attitude;
@@ -99,9 +114,9 @@ protected:
void drawRoll(QPainter *painter);
void drawRollScale(QPainter *painter);
void drawYawScale(QPainter *painter);
void drawScale(QPainter *painter);
void drawLeftScale(QPainter *painter);
void drawCenterLine(QPainter *painter);
void drawText(QPainter *painter);
void drawGPS(QPainter *painter);