演示效果
一、实例代码如下
代码如下(示例):
#include "QtRotateMap.h"
#include <QLabel>
#include <QTimer>
#include <QPixmap>
struct sRotateMapData
{
QTimer *pTimer = nullptr;
QPixmap pixWorld;
QPixmap pixGrid;
QLabel *pLabelWorld = nullptr;
QLabel *pLabelGrid = nullptr;
};
QtRotateMap::QtRotateMap(QWidget *parent)
: QMainWindow(parent)
, d_ptr(new sRotateMapData)
{
ui.setupUi(this);
// 加载图片
d_ptr->pixWorld = QPixmap(":/Resource/map.png");
d_ptr->pixGrid = QPixmap(":/Resource/lbx.png");
// 创建label对象
d_ptr->pLabelWorld = new QLabel(this->centralWidget());
d_ptr->pLabelGrid = new QLabel(this->centralWidget());
// 设置最小值显示
this->setMinimumSize(300, 300);
d_ptr->pLabelWorld->setFixedSize(this->size());
d_ptr->pLabelGrid->setFixedSize(this->size());
// 将图片设置到label上
d_ptr->pixWorld.scaled(d_ptr->pLabelWorld->size(), Qt::KeepAspectRatio);
d_ptr->pLabelWorld->setScaledContents(true);
d_ptr->pLabelWorld->setPixmap(d_ptr->pixWorld);
d_ptr->pixGrid.scaled(d_ptr->pLabelGrid->size(), Qt::KeepAspectRatio);
d_ptr->pLabelGrid->setScaledContents(true);
d_ptr->pLabelGrid->setPixmap(d_ptr->pixGrid);
// 开启定时器
d_ptr->pTimer = new QTimer(this);
d_ptr->pTimer->start(70);
connect(d_ptr->pTimer, SIGNAL(timeout()), this, SLOT(slotOnTimer()));
}
// 进行图片旋转
QPixmap QtRotateMap::rotateImageWithTransform(const QPixmap &pix, int nAngle)
{
int c = pix.height() / 2;
QMatrix mt1;
mt1.translate(c, c); //先将矩阵移到图片中心
mt1.rotate(nAngle); //旋转矩阵
mt1.translate(-c, -c); //将矩阵移回
QPixmap p = pix.transformed(mt1, Qt::SmoothTransformation);
int w = qMin(pix.width(), pix.height());
QRect cube(0, 0, w, w);
cube.moveCenter(QPoint(p.rect().center()));
p = p.copy(cube);
return p;
}
// 定时器槽函数
void QtRotateMap::slotOnTimer()
{
static int nAngle = 0;
nAngle += 1;
nAngle %= 360;
d_ptr->pLabelWorld->setPixmap(rotateImageWithTransform(d_ptr->pixWorld, nAngle));
d_ptr->pLabelGrid->setPixmap(rotateImageWithTransform(d_ptr->pixGrid, -nAngle));
}
// 窗体改变,图片也跟着缩放
void QtRotateMap::paintEvent(QPaintEvent *event)
{
d_ptr->pLabelWorld->setFixedSize(this->size());
d_ptr->pLabelGrid->setFixedSize(this->size());
}t
程序连接下载
连接地址:https://download.csdn.net/download/u013083044/20621797