qt开发(二): graphic view放大导致text失真的完美解决办法

来源:互联网 发布:浙江大学软件学院宿舍 编辑:程序博客网 时间:2024/06/15 11:27

text变形其实本质是painter被加上scale之后,text也随之改变,解决办法是把这个scale找出来,让他只作用于坐标而不作用于text本身。

void Line::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
           QWidget *widget){
    painter->setPen(myPen);
    painter->drawLine(myLine);
    if(mark_.isEmpty()==false){
        painter->setPen(QPen(Qt::black));
        double x1 = myLine.x1();
        double y1 = myLine.y1();
        double x2 = myLine.x2();
        double y2 = myLine.y2();
        QFont font = painter->font();
        font.setPixelSize(16);
        painter->setFont(font);
        QFontMetrics fm(painter->font());
        int textWidthInPixels = fm.width(mark_);
        int textHeightInPixels = fm.height();
        QTransform trans = painter->worldTransform();
        qDebug()<<trans;
        double scale = trans.m11();
        painter->scale(1/scale, 1/scale);
        double x_t = textWidthInPixels- 10;
        double y_t = y2 + textHeightInPixels/2;
        painter->drawText(QPoint(x_t*scale,y_t*scale),mark_);
 
    }
}

原创粉丝点击