hide number when it close to black block
This commit is contained in:
@@ -0,0 +1,244 @@
|
||||
#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(width() / 2, 2 * height() / 5); /* 坐标变换为窗体中心 */
|
||||
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
|
||||
painter.scale(side / 2000.0, side / 2000.0); /* 比例缩放 */
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
||||
|
||||
drawLeftScale(&painter);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
//画左刻度尺 用单独的控件最容易解决
|
||||
void LeftLadder::drawLeftScale(QPainter *painter)
|
||||
{
|
||||
painter->save();
|
||||
|
||||
//平移坐标
|
||||
painter->translate(-1100,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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user