245 lines
4.8 KiB
C++
245 lines
4.8 KiB
C++
#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); /* 使用反锯齿(如果可用) */
|
|
|
|
painter.translate(0, height() / 2); /* 坐标变换为窗体中心 */
|
|
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
|
|
painter.scale(side / 1000.0, side / 1000.0); /* 比例缩放 */
|
|
painter.setPen(Qt::NoPen);
|
|
|
|
|
|
drawLeftScale(&painter);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
//画左刻度尺 用单独的控件最容易解决
|
|
void LeftLadder::drawLeftScale(QPainter *painter)
|
|
{
|
|
painter->save();
|
|
|
|
//平移坐标
|
|
//painter->translate(0,0);
|
|
|
|
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();
|
|
}
|
|
|
|
|
|
|
|
|