#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(); }