draw speed scale
This commit is contained in:
+3
-1
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user