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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章