英文:
How can I rotate the QBitmap nicely while still drawing the position accurately?
问题
我想在任意点上绘制一个 QBitmap
。
例如,我想在 QBitmap
上绘制一个 点 (5, 5)
,以匹配屏幕上的 点 (10, 10)
。
我还想改变围绕该点的 QBitmap
的角度,但如果我旋转它,绘图将失去位置。
如何在保持准确绘制的同时使 QBitmap
旋转得好看?
英文:
I want to draw a QBitmap
over an arbitrary point.
For example, I want to draw a point (5, 5)
on the QBitmap
to match a point (10,10)
on the screen.
I also want to change the angle of the QBitmap
around that point, but if I rotate it, the drawing will be out of position.
How can I rotate the QBitmap
nicely while still drawing the position accurately?
bool MyApp::eventFilter(QObject *obj, QEvent *event)
{
QBitmap qBmp = QBitmap(".\\pix1.bmp");
int iPixX = 10;
int iPixY = 10;
int iDrawPointX = 5;
int iDrawPointY = 5;
if( event->type() == QEvent::Paint ) {
QPainter painter(m_pUi->drawLayer);
painter.setPen( QPen(Qt::black) );
painter.translate(iPixX, iPixY);
painter.rotate(45);
painter.translate(iPixX - iDrawPointX, iPixY - iDrawPointX);
painter.drawPixmap(0, 0, qBmp);
}
painter.end();
return true;
}
return false;
}
答案1
得分: 1
Translate the following code to position your bitmap in screen coordinates:
# 将位图定位到屏幕坐标上:
painter.translate(iPixX - iDrawPointX, iPixY - iDrawPointY);
Make translation to position the bitmap at the point which is the origin of the rotation operation (this is the step you missed; the (5,5) coordinates of the bitmap will be the rotation origin point):
# 进行平移以将位图定位到旋转操作的原点(这是您忽略的步骤,位图的坐标(5,5)将成为旋转的原点):
painter.translate(-iPixX, -iPixY);
Make rotation:
# 进行旋转:
painter.rotate(45);
Back to screen coordinates position:
# 返回到屏幕坐标位置:
painter.translate(iPixX, iPixY);
The full code:
# 完整代码:
painter.translate(iPixX, iPixY);
painter.rotate(45);
painter.translate(-iPixX, -iPixY);
painter.translate(iPixX - iDrawPointX, iPixY - iDrawPointY);
英文:
Make translation to position your bitmap in screen coordinates:
painter.translate(iPixX - iDrawPointX,iPixY - iDrawPointY);
Make translation to position the bitmap in the point which is the origin of rotation operation (this is your missed step, (5,5) coord of bitmap will be rotation origin point):
painter.translate(-iPixX, -iPixY);
Make rotation:
painter.rotate(45);
Back to screen coordinates position:
painter.translate(iPixX, iPixY);
The full code:
painter.translate(iPixX, iPixY);
painter.rotate(45);
painter.translate(-iPixX, -iPixY);
painter.translate(iPixX - iDrawPointX,iPixY - iDrawPointY);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论