draw instrument
This commit is contained in:
+214
-51
@@ -7,7 +7,7 @@
|
||||
|
||||
Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
{
|
||||
setMouseTracking(true);
|
||||
// setMouseTracking(true);
|
||||
//GPS初始化
|
||||
m_GPS.fixtype = 0;
|
||||
m_GPS.svn = 0;
|
||||
@@ -37,48 +37,11 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
m_Attitude.horizontalspeed = 0;//侧滑速度
|
||||
m_Attitude.verticalspeed = 0;//爬升速度
|
||||
|
||||
m_Battery.current = 0;
|
||||
m_Battery.voltage = 0;
|
||||
m_Battery.current[0] = 0;
|
||||
m_Battery.voltage[0] = 0;
|
||||
|
||||
|
||||
/*
|
||||
m_PitchValue = 0;
|
||||
m_RollValue = 0;
|
||||
m_YawValue = 0;
|
||||
m_CourseValue = 0;
|
||||
|
||||
m_GPSAltitudeValue = 0;
|
||||
m_PressureAltitudeValue = 0;
|
||||
|
||||
m_gps_altitude = 21.6;
|
||||
m_pre_altitude = 0;
|
||||
|
||||
m_gps_speed = 0;
|
||||
m_air_speed = 0;
|
||||
|
||||
m_CtrlModeValue = "自动";
|
||||
m_AirplaneModeValue = "固定翼";
|
||||
m_CurrentStatusValue = "起飞";
|
||||
m_LockStatusValue = "未解锁";
|
||||
m_TurningStatusValue = "直飞";
|
||||
|
||||
m_GPSStatusValue = 0;//GPS无效
|
||||
m_GPSStarValue = 0;//卫星数0
|
||||
|
||||
m_Protect = 0;
|
||||
|
||||
//m_Pitch_Roll_MinValue = -90;
|
||||
//m_Pitch_Roll_MaxValue = +90;
|
||||
m_Yaw_MinValue = -180;
|
||||
m_Yaw_MaxValue = 360;
|
||||
m_CourseMinValue = 0;
|
||||
m_CourseMaxValue = 360;
|
||||
|
||||
m_BatteryMinValue = 21.2;//6s
|
||||
m_BatteryMaxValue = 25.2;
|
||||
m_BatteryValue = 25.8;
|
||||
*/
|
||||
m_GroundColor = QColor("#B8860B");
|
||||
m_GroundColor = QColor("#8B5A2B");
|
||||
m_SkyColor = QColor("#5CACEE");
|
||||
|
||||
m_ForeColor = Qt::darkGray;
|
||||
@@ -86,8 +49,17 @@ Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
|
||||
m_LedColor = Qt::green;
|
||||
|
||||
setMinimumSize(QSize(10, 10));
|
||||
resize(600, 200);
|
||||
m_TargetColor = QColor("#B23AEE");
|
||||
m_CurrentColor = QColor("#FFFFFF");
|
||||
|
||||
m_WColor = QColor("#458B00");
|
||||
|
||||
|
||||
//setMinimumSize(QSize(10, 10));
|
||||
//resize(600, 200);
|
||||
|
||||
//qDebug() << "here";
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -103,6 +75,10 @@ void Cockpit::mousePressEvent(QMouseEvent *e)
|
||||
m_LedColor = Qt::blue;
|
||||
|
||||
m_c = this->pos();
|
||||
|
||||
setPitch(m_Attitude.pitch + e->x());
|
||||
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -114,6 +90,12 @@ void Cockpit::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
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);
|
||||
|
||||
qDebug() << "wheel event" << m_Attitude.roll << m_Attitude.pitch;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -209,7 +191,7 @@ void Cockpit::setAirSpeed(double speed)
|
||||
|
||||
void Cockpit::setVoltage(double Voltage)
|
||||
{
|
||||
m_Battery.voltage = Voltage;
|
||||
m_Battery.voltage[0] = Voltage;
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -230,7 +212,9 @@ void Cockpit::paintEvent(QPaintEvent *)
|
||||
painter.scale(side / 2000.0, side / 2000.0); /* 比例缩放 */
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
||||
//drawAttitude(&painter);
|
||||
drawPitch(&painter);
|
||||
drawRoll(&painter);
|
||||
drawRollScale(&painter);
|
||||
//drawYawScale(&painter);
|
||||
//drawScale(&painter);
|
||||
//drawCenterLine(&painter);
|
||||
@@ -244,6 +228,16 @@ void Cockpit::paintEvent(QPaintEvent *)
|
||||
|
||||
|
||||
//drawLowPanel(&painter);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -258,22 +252,191 @@ void Cockpit::drawLed(QPainter *painter)
|
||||
}
|
||||
|
||||
//使用translate对一幅大图进行平移/旋转变换
|
||||
//画姿态roll pitch yaw gx gy gz
|
||||
void Cockpit::drawAttitude(QPainter *painter)
|
||||
//画姿态roll pitch
|
||||
void Cockpit::drawPitch(QPainter *painter)
|
||||
{
|
||||
//画俯仰和滚转
|
||||
//画俯仰
|
||||
QRectF bluerect(-4000,-4000,8000,4000);
|
||||
QRectF yellowrect(-4000,0,8000,4000);
|
||||
//QRectF whiterect(-4000,-8,8000,16);
|
||||
|
||||
painter->save();
|
||||
painter->translate(0,m_Attitude.pitch/90.0f * 1000);
|
||||
painter->rotate(-m_Attitude.roll);
|
||||
painter->translate(0,m_Attitude.pitch/45.0f * 1000);
|
||||
|
||||
painter->setBrush(m_SkyColor);
|
||||
painter->drawRect(bluerect);
|
||||
painter->setBrush(m_GroundColor);
|
||||
painter->drawRect(yellowrect);
|
||||
//painter->setBrush(QColor("#FFFFFF"));
|
||||
//painter->drawRect(whiterect);
|
||||
|
||||
//俯仰刻度线
|
||||
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
//画航向
|
||||
void Cockpit::drawRoll(QPainter *painter)
|
||||
{
|
||||
//画俯仰和滚转
|
||||
|
||||
painter->save();
|
||||
painter->rotate(m_Attitude.roll);
|
||||
|
||||
//画绿色W和顶部滚转
|
||||
|
||||
|
||||
static const QPointF W_Line[7] = {
|
||||
QPointF(-350, 0),
|
||||
QPointF(-100, 0),
|
||||
QPointF(-50, 100),
|
||||
QPointF( 0,-100),
|
||||
QPointF( 50, 100),
|
||||
QPointF( 100, 0),
|
||||
QPointF( 300, 0)
|
||||
};
|
||||
|
||||
QPen pen;
|
||||
pen.setWidth(10);
|
||||
pen.setColor(m_WColor);
|
||||
painter->setPen(pen);
|
||||
painter->drawPolyline(W_Line,7);
|
||||
|
||||
|
||||
if((m_Attitude.roll >= -60)&&(m_Attitude.roll <= 60))
|
||||
{
|
||||
|
||||
|
||||
//画紫色小三角形
|
||||
static const QPointF points1[3] = {
|
||||
QPointF(-50,-620),
|
||||
QPointF(0,-690),
|
||||
QPointF(50,-620)
|
||||
};
|
||||
|
||||
pen.setWidth(1);
|
||||
pen.setColor(m_TargetColor);
|
||||
painter->setPen(pen);
|
||||
painter->setBrush(m_TargetColor);
|
||||
painter->drawPolygon(points1,3);
|
||||
|
||||
|
||||
//画白色小三角形
|
||||
static const QPointF points2[3] = {
|
||||
QPointF(-50,-800),
|
||||
QPointF(0,-710),
|
||||
QPointF(50,-800)
|
||||
};
|
||||
|
||||
pen.setWidth(1);
|
||||
pen.setColor(m_CurrentColor);
|
||||
painter->setPen(pen);
|
||||
painter->setBrush(m_CurrentColor);
|
||||
painter->drawPolygon(points2,3);
|
||||
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
|
||||
}
|
||||
|
||||
void Cockpit::drawRollScale(QPainter *painter)
|
||||
{
|
||||
painter->save();
|
||||
|
||||
QPen ePen;
|
||||
ePen.setColor(m_CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
QFont font;
|
||||
font.setPointSize(60);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawArc(-700,-700,1400,1400,30*16,120*16);
|
||||
|
||||
//中间 两块黑块
|
||||
|
||||
static const QPointF points1[6] = {
|
||||
QPointF(-700, 0),
|
||||
QPointF(-400, 0),
|
||||
QPointF(-400, 100),
|
||||
QPointF(-450, 100),
|
||||
QPointF(-450, 50),
|
||||
QPointF(-700, 50)
|
||||
};
|
||||
static const QPointF points2[6] = {
|
||||
QPointF(700, 0),
|
||||
QPointF(400, 0),
|
||||
QPointF(400, 100),
|
||||
QPointF(450, 100),
|
||||
QPointF(450, 50),
|
||||
QPointF(700, 50)
|
||||
};
|
||||
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawPolygon(points1, 6);
|
||||
painter->drawPolygon(points2, 6);
|
||||
|
||||
|
||||
|
||||
|
||||
//大刻度盘
|
||||
for(int i = -60;i<=60;i+=10)
|
||||
{
|
||||
//QString strText = QString::number(i); //设置当前字体
|
||||
painter->save();
|
||||
painter->translate(0,0);
|
||||
painter->rotate(-i);
|
||||
if((i%20) == 0)
|
||||
painter->drawLine(0,-700,0,-740);
|
||||
else
|
||||
painter->drawLine(0,-700,0,-720);
|
||||
//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){
|
||||
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();
|
||||
|
||||
}
|
||||
//画航向(位于底部的一个圈)
|
||||
void Cockpit::drawYawScale(QPainter *painter)
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user