如何在QT QWidgets C++中围绕图像中心旋转图像

How to rotate an image around its centre in QT QWidgets C++?

本文关键字:图像 旋转 C++ QT QWidgets      更新时间:2023-10-16

我正在尝试使用C++中的QWidgts围绕QT中的原点(中心)旋转图像。我在这里做了很多实验,但无论我做什么,图像都会在我不知道的任意位置旋转。请帮帮我。我是QT的新手。

void gaugeWithRedZoneImage::rotate()
{
    QPixmap pixmap(*gaugeMainScreen->pixmap());
    QMatrix rm;
    rm.translate(0, 0);
    rm.rotate(-360);
    pixmap = pixmap.transformed(rm);
    gaugeMainScreen->setPixmap(pixmap);
    /*QTransform rotate_disc;
    rotate_disc.translate(pixmap.width()/2.0 , pixmap.height()/2.0);
    rotate_disc.rotate(-60);
    rotate_disc.translate(-(pixmap.width()/2.0) , -(pixmap.height()/2.0));
    pixmap = pixmap.transformed(rotate_disc);
    gaugeMainScreen->setPixmap(pixmap);*/
}

形成QPixmap::transformed():的文档

变换变换在内部进行调整,以补偿不需要的平移;即所产生的像素图是包含原始像素图的所有变换点的最小像素图。

这意味着该方法通过附加画布来确保不会发生剪切。无论你的旋转中心是什么,画布的自动延伸几乎总是会导致感知到的变化。

图像示例可能有助于进一步诊断问题。

正如ypnos所说,你的问题不在于旋转中心。当您旋转图像时,其宽度和高度很可能会发生变化,不再适合您的容器(gaugeMainScreen)尺寸。

你有一些克服这个问题的可能性。其中之一是将容器设置为缩放其内容(可以使用方法setScaledContents())。在这种情况下,您必须保留原始图像,并在应用旋转时使用它,否则您的图像会越来越小。