Files
gcs-nf/Cockpit/leftladder.cpp
T

245 lines
4.8 KiB
C++
Raw Normal View History

2020-01-03 18:32:37 +08:00
#include "leftladder.h"
LeftLadder::LeftLadder(QWidget *parent): QWidget(parent)
{
m_CentreLineColor = Qt::white;
}
void LeftLadder::setAirSpeed(float speed)
{
airspeed = speed;
}
void LeftLadder::mouseReleaseEvent(QMouseEvent *e)
{
qDebug() << "release" << e;
update();
}
void LeftLadder::mousePressEvent(QMouseEvent *e)
{
qDebug() << "press" << e;
update();
}
void LeftLadder::mouseDoubleClickEvent(QMouseEvent *e)
{
qDebug() << "double clicked" << e;
update();
}
void LeftLadder::wheelEvent(QWheelEvent *e)
{
qDebug() << "wheel event" << e;
update();
}
void LeftLadder::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */
2020-01-03 21:37:25 +08:00
painter.translate(0, height() / 2); /* 坐标变换为窗体中心 */
2020-01-03 18:32:37 +08:00
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
2020-01-03 21:37:25 +08:00
painter.scale(side / 1000.0, side / 1000.0); /* 比例缩放 */
2020-01-03 18:32:37 +08:00
painter.setPen(Qt::NoPen);
drawLeftScale(&painter);
}
//画左刻度尺 用单独的控件最容易解决
void LeftLadder::drawLeftScale(QPainter *painter)
{
painter->save();
//平移坐标
2020-01-03 21:37:25 +08:00
//painter->translate(0,0);
2020-01-03 18:32:37 +08:00
QPen ePen;
QFont font;
//画一个半透明的小方块
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);
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"TAS " + QString::number(airspeed));
painter->restore();
//画旁边的速度刻度,并显示
painter->save();
painter->translate(0,1200.0f/40.0f * airspeed);
float h = 1200.0f/40.0f;//单位高度
for(int i = -19 - airspeed;i<=(19 - 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(airspeed/10)); //设置十位以上
QString UnitText = QString::number(qAbs(int(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 = airspeed - int(airspeed)/10 * 10;
float Decimal = (airspeed - int(airspeed));
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);
painter->drawText(QRect(200,(i + Unit) * 100 - 50,100,90),Qt::AlignVCenter|Qt::AlignLeft, strText);
painter->restore();
}
painter->restore();
painter->restore();
}