Qt图片旋转

小王子🤴 2020-09-20 21:37:39 2901
Qt图片旋转

开发过程中突然遇到有个按钮图标需要旋转的需求,就找了下实现旋转的实现方法,以下是实现的代码。
这里我继承了QAbstractButton类,重新绘制按钮的图片,在需要旋转的时候旋转

class spinButton : public QAbstractButton{
    Q_OBJECT
public:
    spinButton(QWidget *parent = nullptr);
    void setIcons(QIcon ic);
    void start();
    void stop();

signals:
public slots:
    void timeOut();
protected:
    virtual void paintEvent(QPaintEvent *e);
private:
    QPixmap Icon;
    int angle = 0;
    bool isRotate = false;
    QTimer *timer = nullptr;

};

TreeWidgetEx::spinButton::spinButton(QWidget *parent) : QAbstractButton(parent)
{
    Icon = QPixmap();
    timer = new QTimer(this);
    connect(tim,SIGNAL(timeout()),this,SLOT(timeOut()));
    angle = 0;
}

void TreeWidgetEx::spinButton::setIcons(QIcon ic)
{
    Icon = ic;
}

void TreeWidgetEx::spinButton::start()
{
    angle = 0;
    tim->start(20);
}

void TreeWidgetEx::spinButton::stop()
{
    tim->stop();
    angle = 0;
    update();
}

void TreeWidgetEx::spinButton::timeOut()
{
    angle += 20;
    if(angle >= 360)
        angle = 0;

    update();

}

void TreeWidgetEx::spinButton::paintEvent(QPaintEvent *e)
{
    Q_UNUSED(e)

    QPainter paint(this);
    paint.save();
    paint.setRenderHints(QPainter::Antialiasing, true);

    QPixmap pixmap = Icon.scaled(this->width()-10,this->height()-10,Qt::KeepAspectRatio, Qt::SmoothTransformation);

    paint.rotate(angle);//坐标旋转
    //经分析,应使图片中心,对应原点
    paint.drawPixmap(-pixmap.width()/2,-pixmap.height()/2,pixmap);

    paint.restore();
}
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 1 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
小王子🤴
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区