dou_uod 2023-02-10 18:39 采纳率: 66.7%
浏览 68
已结题

QPainter的位置问题

Qt的painter.drawtext位置问题
分别调用了drawtext和drawPixmap

painter.drawPixmap(itemX*widthScale/scaleImgToItem,
                                       itemY*heightScale/scaleImgToItem,
                                       m_image[i]->boundingRect().width()/backgroundItem->boundingRect().width()*pm.width(),
                                       m_image[i]->boundingRect().height()/backgroundItem->boundingRect().height()*pm.height(),
                                       m_image[i]->pixmap());


painter.drawText(itemX*widthScale/scaleImgToItem,itemY*heightScale/scaleImgToItem,texts.at(k));

输出如下

img itemX =  1141.53
img itemY =  698.182
img itemX*widthScale/scaleImgToItem =  711.971
img itemY*heightScale/scaleImgToItem =  464.487
text itemX =  1142.3
text itemY =  686.59
text itemX*widthScale/scaleImgToItem =  712.455
text itemY*heightScale/scaleImgToItem =  456.775

预览的图上的位置

img

实际出来的图上的位置

img


是什么导致我的drawtext位置偏移这么远。

新增painter设置代码

QPainter painter(&pm);
//这是图片和文字共用的

 painter.rotate(angle);
painter.setFont(font);
painter.setPen(static_cast<MyQgraphicsTextItem *>(res.at(i))->getColor()); //这三行是文字独有的设置,如果angle=0那么没有偏移,angle有任何角度就会发生偏移,之前是没有这个问题的,应该是改了背景的boundingrect出现的现在的问题。
 m_rect=QRectF(0,0,w,h);  //背景的boundingrect用这一行文字打印就有问题
 m_rect=QRectF(-w/2,-h/2,w,h);//用这一行文字就没问题,但是图片部分又会有偏移问题。
  • 写回答

4条回答 默认 最新

  • Telescope720 2023-02-13 16:46
    关注

    drawText 方法的偏移可能是由于应用到画家的旋转。 当您旋转 painter 时,它的坐标系也会旋转,这可能会导致文本绘制在与您预期不同的位置。

    这个问题的一种解决方案是在绘制文本之前将画家的坐标系平移回其原始位置。 您可以使用 QPainter 类的翻译方法来完成此操作。 例如:

    painter.translate(w / 2, h / 2);
    painter.rotate(angle);
    painter.translate(-w / 2, -h / 2);
    painter.drawText(itemX * widthScale / scaleImgToItem, itemY * heightScale / scaleImgToItem, texts.at(k));
    

    这样可以保证旋转后坐标系不变,文字会绘制在预期的位置。

    关于drawPixmap 方法的偏移,可能是由于背景的边界矩形发生了变化。 问题似乎出在行 m_rect = QRectF(0, 0, w, h); 中,它将左上角的边界矩形设置为 (0, 0)。 这可能会导致 drawPixmap 方法的偏移。 要解决此问题,您可以将边界矩形设置为以原点为中心,就像您在行 m_rect = QRectF(-w/2, -h/2, w, h); 中所做的那样。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 修改了问题 2月10日
  • 修改了问题 2月10日
  • 展开全部

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了