我正在尝试使用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);*/
}
答案 0 :(得分:1)
形成QPixmap::transformed()
的{{3}}:
转换转换在内部进行调整以补偿不需要的转换;即,产生的像素图是包含原始像素图的所有变换点的最小像素图。
这意味着该方法通过附加画布确保不会发生剪切。无论您的旋转中心是什么,画布的自动扩展几乎总会导致感知转变。
图像示例可能有助于进一步诊断问题。
答案 1 :(得分:0)
正如ypnos所说,你的问题不在于轮换中心。旋转图像时,其宽度和高度很可能会发生变化,不再适合您的容器(gaugeMainScreen)尺寸。
您有一些可能性来克服这个问题。其中之一是设置容器以扩展其内容(您可以使用方法setScaledContents())。在这种情况下,您必须保留原始图像并在应用旋转时使用它,否则您的图像将显得越来越小。