美文网首页
我的挖掘机

我的挖掘机

作者: Qt君 | 来源:发表于2019-12-11 22:43 被阅读0次

非常感谢navca的分享。该例子基于QGraphicsItem绘图实现的挖掘机。(文末源码地址)

demo.gif

心中有坐标,万物皆可绘

  我的挖掘机例子共分为车体大臂小臂爪子四部分,全部皆为自绘。

  • 车体
void Body::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setBrush(QBrush(Qt::darkYellow));
    painter->drawRect(0,0,220,100);
    painter->drawRect(100,-80,100,80);

    painter->setBrush(QBrush(Qt::darkYellow));
    painter->drawEllipse(_pinPoint1, 5,5);
    painter->drawEllipse(_pinPoint2, 5,5);

    painter->setPen(QPen(QBrush(Qt::gray), 6));
    QPointF p(mapFromItem(_bigHand, _bigHand->PinPoint));
    painter->drawLine(_pinPoint2.x(), _pinPoint2.y(), p.x(), p.y());

    //液压臂
    painter->setPen(QPen(QBrush(Qt::black), 10));
    QLineF line(_pinPoint2, p);
    qreal angle = line.angle();
    QPointF midPoint(_pinPoint2.x()+ 80*cos(qDegreesToRadians(angle)), _pinPoint2.y() - 80*sin(qDegreesToRadians(angle)));
    painter->drawLine(_pinPoint2, midPoint);
}
  • 大臂
void BigHand::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setPen(Qt::black);
    painter->setBrush(Qt::yellow);

    QPainterPath path;
    path.moveTo(-6,2);
    path.lineTo(60,-180);
    path.lineTo(250,-270);
    path.lineTo(258,-260);
    path.lineTo(90,-150);
    path.lineTo(5,5);

    path.moveTo(_pinPoint2.x()-10, _pinPoint2.y()+5);
    path.lineTo(_pinPoint2.x()-5, _pinPoint2.y()-8);
    path.lineTo(_pinPoint2.x()+8, _pinPoint2.y()-5);
    path.lineTo(_pinPoint2.x()-10, _pinPoint2.y()+5);
    painter->drawPath(path);

    painter->setBrush(Qt::darkYellow);
    painter->drawEllipse(-4,-5,10,10);
    painter->drawEllipse(PinPoint,5,5);

    painter->drawEllipse(_pinPoint1,5,5);

    painter->drawEllipse(_pinPoint2,5,5);

    painter->setPen(QPen(QBrush(Qt::gray), 6));
    QPointF p(mapFromItem(_smallHand, _smallHand->PinPoint));
    painter->drawLine(_pinPoint2.x(), _pinPoint2.y(), p.x(), p.y());

    //液压臂
    painter->setPen(QPen(QBrush(Qt::black), 10));
    QLineF line(_pinPoint2, p);
    qreal angle = line.angle();
    QPointF midPoint(_pinPoint2.x()+ 110*cos(qDegreesToRadians(angle)), _pinPoint2.y() - 110*sin(qDegreesToRadians(angle)));
    painter->drawLine(_pinPoint2, midPoint);
}
  • 小臂
void SmallHand::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setPen(Qt::black);
    painter->setBrush(Qt::yellow);

    QPainterPath path;
    path.moveTo(-50, -30);
    path.lineTo(200, 0);
    path.lineTo(198, 10);
    path.lineTo(-3, 5);
    path.lineTo(-55, -18);
    path.lineTo(-50, -30);

    path.moveTo(_pinPoint1.x()-10, _pinPoint1.y()+5);
    path.lineTo(_pinPoint1.x(), _pinPoint1.y()-6);
    path.lineTo(_pinPoint1.x()+10, _pinPoint1.y()+7);
    path.lineTo(_pinPoint1.x()-8, _pinPoint1.y()+5);
    painter->drawPath(path);

    painter->setBrush(Qt::darkYellow);
    painter->drawEllipse(-5,-5, 10, 10);
    painter->drawEllipse(PinPoint,5,5);
    painter->drawEllipse(_pinPoint1,5,5);
    painter->drawEllipse(_pinPoint2,5,5);
    painter->drawEllipse(_pinPoint3,5,5);

    painter->setPen(QPen(QBrush(Qt::gray), 6));
    QPointF p(mapFromItem(_littleHand, _littleHand->PinPoint));
    painter->drawLine(_pinPoint1.x(), _pinPoint1.y(), p.x(), p.y());

    painter->setPen(QPen(QBrush(Qt::black), 10));
    QLineF line(_pinPoint1, p);
    qreal angle = line.angle();
    QPointF midPoint(_pinPoint1.x()+ 90*cos(qDegreesToRadians(angle)), _pinPoint1.y() - 90*sin(qDegreesToRadians(angle)));
    painter->drawLine(_pinPoint1, midPoint);

    painter->setPen(QPen(QBrush(Qt::black), 10));
    QPointF p1(mapFromItem(_hand, _hand->PinPoint));
    painter->drawLine(p.x(), p.y(), p1.x(), p1.y());
}
  • 爪子
void Hand::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->setPen(Qt::black);
    painter->setBrush(Qt::yellow);

    QPainterPath path;
    path.moveTo(-12, -30);
    path.lineTo(-3, -35);
    path.lineTo(-6, -44);
    path.lineTo(6, -48);
    path.lineTo(35, -45);
    path.lineTo(70, 0);
    path.lineTo(15, -10);
    path.lineTo(10, 0);
    path.lineTo(3, 7);
    path.lineTo(-3, 3);
    path.lineTo(-12, -30);
    painter->drawPath(path);

    painter->setBrush(Qt::darkYellow);
    painter->drawEllipse(PinPoint,5,5);
    painter->drawEllipse(_pinPoint1,5,5);
}
main_page.png

源码地址(欢迎star)

相关文章

  • 小家小事 007 挖掘机是你女朋友吗? 不是

    背景:娃酷爱挖掘机,每次见到挖掘机应该是比见到她妈都亲吧 娃:挖掘机,挖掘机,挖掘机,是挖掘机! 娃妈:挖掘机是你...

  • 挖掘机到了自家门前。

    电视里看挖掘机,书上有挖掘机,玩具也是挖掘机,突然发现挖掘机到了自家门前,黄冠宇开心得不知所以!我正在厨房做...

  • 创天启二手挖掘机市场:想要买挖掘机,去二手挖掘机交易市场有什么好

    我的朋友最近计划购买一台二手中型挖掘机。问我是买新挖掘机还是二手挖掘机。我建议他买一台状况良好的二手挖掘机。我推荐...

  • 民间怪谈:泥偶作祟

    讲个关于挖掘机师傅的灵异故事吧,我有一朋友在青岛开挖掘机,他开挖掘机比较早,赚了不少钱,手里有两台挖掘机,一台自己...

  • 我要讲个悄悄话

    二狗子昨晚半夜哭的稀里哗啦,还喊着我的挖掘机,我的挖掘机。我在隔壁都听见了,他爸和他说挖掘机在呢,在呢,可他还是在...

  • 我的弟弟

    我有一个弟弟,非常喜欢挖掘机。 他每天都在看挖掘机,才两岁半,就已经被挖掘机迷上了,他还叫我爸爸买了许多挖掘机...

  • 我的挖掘机

    非常感谢navca的分享。该例子基于QGraphicsItem绘图实现的挖掘机。(文末源码地址) 心中有坐标,万物...

  • 让你的销售额快速倍增。

    现在卖挖掘机卖得好的,都不是跟去跟买挖掘机的人打交道,而是去跟开挖掘机的人打交道。因为那个买挖掘机的人要问开挖掘机...

  • 乐乐语录

    挖掘机怎么了, 挖掘机生病了,吃药

  • 我认识的那些人之涛神仙(散文)

    我认识涛哥得有两年,后来没见过,只知道他去学了挖掘机驾驶,承包了几台挖掘机,再后来把挖掘机卖了,干起招生,至于生源...

网友评论

      本文标题:我的挖掘机

      本文链接:https://www.haomeiwen.com/subject/apzagctx.html