• 8351阅读
  • 5回复

关于QPainter::translate()的问题 [复制链接]

上一主题 下一主题
离线pywepe
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-15


void QPainter::translate ( const QPointF & offset )

Translates the coordinate system by the given offset; i.e. the given offset is added to points.


这个方法是不是设置一个"逻辑原点"

然后 QPainter::roate()  就围绕着这个"逻辑原点"旋转??


离线dbzhang800

只看该作者 1楼 发表于: 2009-12-15
对的
离线pywepe
只看该作者 2楼 发表于: 2009-12-15
引用第1楼dbzhang800于2009-12-15 22:18发表的  :
对的



搞得很糊涂

每次 roate(30)  再QPainter::drawRect(10,10,10,10)   它画的Rect在哪呢?  是不是坐标都跟着变?

然后就相当于 把我的显示器 旋转30度
再 画Rect(10,10,10,10)


???
离线robertkun

只看该作者 3楼 发表于: 2009-12-16
  1.     QGraphicsItem* _this = toGraphicsItem();
  2.      QRectF rect = _this->boundingRect();
  3.         painter->save();
  4.      const QTransform& formOrg = painter->transform();
  5.     rect.setWidth(rect.width() * formOrg.m11());
  6.     rect.setHeight(rect.height() * formOrg.m22());
  7.     rect.moveTopLeft(QPointF(rect.x()*formOrg.m11(),rect.y()*formOrg.m22()));
  8.     QTransform formNew(    1.0f,    formOrg.m12(),    formOrg.m13(),
  9.                          formOrg.m21(), 1.0f     ,    formOrg.m23(),
  10.                          formOrg.m31(), formOrg.m32(), formOrg.m33());
  11.      painter->setTransform(formNew,false);
  12.     QPointF topLeft, topCenter, topRight, leftCenter, bottomLeft, bottomCenter, bottomRight, rightCenter;
  13.     topLeft        = rect.topLeft();
  14.     topCenter    = QPointF(rect.center().x(), rect.top());
  15.     topRight    = rect.topRight();
  16.     leftCenter    = QPointF(rect.left(), rect.center().y());
  17.     bottomLeft    = rect.bottomLeft();
  18.     bottomCenter = QPointF(rect.center().x(), rect.bottom());
  19.     bottomRight = rect.bottomRight();
  20.     rightCenter = QPointF(rect.right(), rect.center().y());
  21.        //绘制文字拖动点
  22.     painter->setPen(Qt::NoPen);
  23.        painter->setBrush(QBrush(Qt::yellow,Qt::SolidPattern));
  24.     qreal sX = 3;
  25.     qreal sY = 3;
  26.     painter->drawRect(QRectF((topLeft - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  27.     painter->drawRect(QRectF((topCenter - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  28.     painter->drawRect(QRectF((topRight - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  29.     painter->drawRect(QRectF((leftCenter - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  30.     
  31.     painter->drawRect(QRectF((bottomLeft - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  32.     painter->drawRect(QRectF((bottomCenter - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  33.     painter->drawRect(QRectF((bottomRight - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  34.     painter->drawRect(QRectF((rightCenter - QPointF(1.5,1.5)), QSizeF(sX,sY) ));
  35.      painter->restore();


这是我用来绘制item上面 8 个可以缩放大小的点。可是当item 旋转以后,8 个点的位置同样出现了问题。

不知道QPainter 的角度是怎样设置的,请高手指点。
                                              简单的生活使人快乐!
离线pywepe
只看该作者 4楼 发表于: 2009-12-16
也是问问题的 哈哈
离线dbzhang800

只看该作者 5楼 发表于: 2009-12-16
贴段代码,希望有帮助

  1. void Widget::paintEvent(QPaintEvent *event)
  2. {
  3.     QPainter painter(this);
  4.     painter.translate(width()/2, height()/2);
  5.     for (int i=0; i<12; ++i)
  6.     {
  7.         painter.drawLine(0, 0, 50, 0);
  8.         painter.drawText(50, 0, QString::number(i));
  9.         painter.rotate(30);
  10.     }
  11. }
快速回复
限100 字节
 
上一个 下一个