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

时间:2016-03-28 15:20:42

标签: c++ qt qwidget qpixmap

我正在尝试使用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);*/
}

2 个答案:

答案 0 :(得分:1)

形成QPixmap::transformed()的{​​{3}}:

  

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

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

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

答案 1 :(得分:0)

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

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