图像旋转有两种方法
- QPixmap 的 transformed
QMatrix matrix;
matrix.rotate(angle);
ui.label_image->setPixmap(m_currentImage.transformed(matrix, Qt::SmoothTransformation));
旋转后
我希望的效果是图片即使旋转,也要在指定的区域内部绘制完整,不能有不对成的缺失,更不能进行放缩
所以采用第二种方式
- QPainter
QPixmap pix(ui.label_image->size());
QPainter painter(&pix);
painter.setBrush(Qt::transparent);
painter.setPen(Qt::red);
auto srcRect = ui.label_image->rect();
painter.translate(srcRect.center());
painter.rotate(angle);
painter.drawPixmap(QPoint(-m_currentImage.width() / 2, -m_currentImage.height() / 2), m_currentImage);
painter.resetTransform();
ui.label_image->setPixmap(pix);
需要注意的是
我是在QWidget中放置了QLabel,且QWidget不适用布局,这个Widget和Label都是为了图片服务的,这样做的用处是放置QLabel随图片的尺寸进行适应。
效果