qt中Graphic中 View的坐标和Scene的坐标不匹配的问题

在QT中使用QGraphicView 和QGraphicsSce  时,会遇到一个这样一个问题:Scene中绘制图的坐标与View显示坐标不符。

例如:直接在scene中添加直线,并且设置起点是0,0。但是我们会发现他的起点并不是0,0。如下图

 

    scene.addLine(test.set_x(0),test.set_y(0),test.set_x(50),test.set_y(0));
    scene.addLine(0,0,100,100);

 

 

为了解决这个问题,我们调用Scene的方法setSceneRect方法,如图:

    scene.setSceneRect(0,0,this->ui->graphicsView->width(),this->ui->graphicsView->height());
    scene.addLine(test.set_x(0),test.set_y(0),test.set_x(50),test.set_y(0));
    scene.addLine(0,0,100,100);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个完整的示例代码,实现了在 QGraphicsView 点击鼠标后在指定位置周围框选一个 100*100 的红色矩形: ```python from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsRectItem from PyQt5.QtGui import QBrush, QColor from PyQt5.QtCore import Qt class MyGraphicsView(QGraphicsView): def __init__(self): super().__init__() self.setScene(QGraphicsScene(self)) self.setRenderHint(QPainter.Antialiasing) self.setRenderHint(QPainter.SmoothPixmapTransform) self.setDragMode(QGraphicsView.ScrollHandDrag) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorUnderMouse) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) self.setOptimizationFlag(QGraphicsView.DontAdjustForAntialiasing, True) self.setOptimizationFlag(QGraphicsView.DontSavePainterState, True) self.setOptimizationFlag(QGraphicsView.DontAdjustForDrag, True) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: pos = self.mapToScene(event.pos()) rect = self.scene().addRect(pos.x()-50, pos.y()-50, 100, 100) rect.setBrush(QBrush(QColor("red"))) rect.setPen(Qt.NoPen) if __name__ == '__main__': app = QApplication([]) view = MyGraphicsView() view.show() app.exec_() ``` 运行以上代码,点击 QGraphicsView 的任意位置,即可在该位置周围框选一个 100*100 的红色矩形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值