Qt在图片给定位置添加按钮,并随图片的缩放而缩放

最近项目上有这样一个需求,在图片的指定位置添加按钮,图片随着窗口的大小而改变,按钮位置随着图片的大小改变而改变,具体图片是这样的:

需要在红色的圆形区域添加按钮,如果直接放在指定位置呢,窗口大小改变了,图片的位置也就改变了,不能像布局那样随着窗口的大小而改变,期间还参考了这个http://stevenshi.me/2017/05/09/qt-widget-designated-location/,没有达到我要的效果.最终在群里大佬的指点下,整理了出来,最终效果:

思路就是重写resizeEvent,直接贴上代码:

#ifndef TCS_H
#define TCS_H

#include <QWidget>
#include <QPixmap>
#include <QPushButton>
#include <QRect>
#include <QMap>
#include <QResizeEvent>
#include <QPaintEvent>

namespace Ui {
class TCS;
}

class TCS : public QWidget
{
    Q_OBJECT

public:
    explicit TCS(QWidget *parent = 0);
    ~TCS();
protected:
    void resizeEvent(QResizeEvent *ev);
     void paintEvent(QPaintEvent *e);

private:
    Ui::TCS *ui;
    QPixmap m_bg;
    QMap <QAbstractButton*,QRect> m_btns;

};

#endif // TCS_H
#include "tcs.h"
#include "ui_tcs.h"
#include <QPainter>

TCS::TCS(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TCS)
{
    ui->setupUi(this);
    m_bg = QPixmap(":/new/prefix1/image/tcs/tcs.png");
    foreach (auto btn, ui->buttonGroup->buttons()) {
        m_btns[btn] = btn->geometry();
    }

}

TCS::~TCS()
{
    delete ui;
}
void TCS::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.drawPixmap(rect(),m_bg);
}

void TCS::resizeEvent(QResizeEvent *ev)
{
    QWidget::resizeEvent(ev);
    QMatrix m;
    m.scale(ev->size().width()*1.0/m_bg.width(),
            ev->size().height()*1.0/m_bg.height());
    foreach (auto btn, m_btns.keys()) {
        btn->setGeometry(m.mapRect(m_btns[btn]));
    }
}

下载地址:https://download.csdn.net/download/yu_20501253/11380320

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值