16,203
社区成员
发帖
与我相关
我的任务
分享
你的这个坐标系的转换等于是把整个坐标系沿x轴翻转。在用pixmap输出图像的时候你应该也会遇到这种情况。
解决方法是,写一个函数,输出图像和文字的时候把改变坐标系原点,把坐标系翻转,输出文字和图像之后再翻转回来,并把原点还原。
inline void SetMathCoordinate(Dialog* dialog,QPainter* painter){
//转换为数学坐标系
painter->setWindow(-0.5*dialog->width(), 0.5*dialog->height(), 1*dialog->width(), -1 * dialog->height());
}
inline void ResetDefaultCoordinate(Dialog* dialog,QPainter* painter){
//恢复默认坐标系
painter->setWindow(0, 0, dialog->width(), dialog->height());
}
//数学坐标系,但书写文字时候需要重置调用setwindow
void Dialog::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)//去除event未使用的告警
QPainter painter(this);
QPen pen;
pen.setColor(Qt::black);
pen.setStyle(Qt::SolidLine);
pen.setWidthF(2);
painter.setPen(pen);
//转换为数学坐标系,原点为屏幕正中间
SetMathCoordinate(this,&painter);
//画一个正方形
QPolygon polygon;
polygon << QPoint(0,0) << QPoint(0,100);
polygon << QPoint(100,100) << QPoint(100,0);
painter.drawPolygon(polygon);
//画一个正方形
QPolygon polygon1;
polygon1 << QPoint(0,0) << QPoint(0,-100);
polygon1 << QPoint(100,-100) << QPoint(100,0);
painter.drawPolygon(polygon1);
//画一个正方形
QPolygon polygon2;
polygon2 << QPoint(0,0) << QPoint(0,-100);
polygon2 << QPoint(-100,-100) << QPoint(-100,0);
painter.drawPolygon(polygon2);
//画一个正方形
QPolygon polygon3;
polygon3 << QPoint(0,0) << QPoint(-100,0);
polygon3 << QPoint(-100,100) << QPoint(0,100);
painter.drawPolygon(polygon3);
//恢复坐标系,使文字正常显示
ResetDefaultCoordinate(this,&painter);
//注意drawText的x,y参数,比如"hello world"的位置为(x1:100,y1:100)
//则x = 0.5*width() + x1 = 0.5*width()+100;
//则y = 0.5*height() - y1 = 0.5*height()-100;
painter.drawText(0.5*width()+100,0.5*height()-100,"hello world");
//恢复数学坐标系
SetMathCoordinate(this,&painter);
//可以显示
//画一个三角形
QPolygon polygon4;
polygon4 << QPoint(0,0) << QPoint(50,50);
polygon4 << QPoint(50,0) << QPoint(0,0);
painter.drawPolygon(polygon4);
}
QPainter painter(this);
painter.translate(0,height());
painter.scale(1,-1);
painter.drawText(rect(),Qt::AlignCenter,"123456");