- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 q qrubberband 显示效果不好,认为想要的坐标没问题:
class Viewer(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.graphicsView = QtWidgets.QGraphicsView()
self.hbox = QtWidgets.QVBoxLayout()
self.scene = Scene(self)
self.splitter = QtWidgets.QSplitter()
self.splitter.addWidget(self.graphicsView)
self.widget.setLayout(self.hbox)
self.setCentralWidget(self.widget)
我在场景中加载像素图:
def open_picture(self):
self.scene.setSceneRect(0, 0, self.pixmap.width(), self.pixmap.height())
self.scene.addPixmap(self.pixmap)
self.graphicsView.setScene(self.scene)
self.graphicsView.show()
我的场景继承自 QGraphicsScene,主要处理场景上的 qrubberband
class Scene(QtWidgets.QGraphicsScene):
def __init__(self, parent=None):
super(Scene, self).__init__(parent)
def mousePressEvent(self, event):
self.originQPoint = event.scenePos()
self.originQPoint = self.originQPoint.toPoint()
self.currentQRubberBand = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle)
def mouseMoveEvent(self, event):
self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, event.scenePos().toPoint()).normalized())
self.currentQRubberBand.show()
def mouseReleaseEvent(self, event):
print(self.items)
self.currentQRubberBand.hide()
self.currentQRect = self.currentQRubberBand.geometry()
print(self.currentQRect)
我的问题是矩形显示在我的笔记本电脑的屏幕上,但坐标没问题(场景坐标)如何在不更改 self.currentQRect 值的情况下正确绘制场景中的橡皮筋?
最佳答案
根据docs :
QPointF QGraphicsSceneMouseEvent::scenePos() const
Returns the mouse cursor position in scene coordinates.
从上面我们可以得出结论,我们得到的点是相对于场景而不是屏幕的,所以这不是我们想要的。
使用方法是screenPos()
:
QPoint QGraphicsSceneMouseEvent::screenPos() const
Returns the mouse cursor position in screen coordinates.
通过上述我们得到以下代码:
class Scene(QtWidgets.QGraphicsScene):
def __init__(self, parent=None):
super(Scene, self).__init__(parent)
def mousePressEvent(self, event):
self.originQPoint = event.screenPos()
self.currentQRubberBand = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle)
self.originCropPoint = event.scenePos()
def mouseMoveEvent(self, event):
self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, event.screenPos()))
self.currentQRubberBand.show()
def mouseReleaseEvent(self, event):
self.currentQRubberBand.hide()
currentQRect = self.currentQRubberBand.geometry()
self.currentQRect = QtCore.QRect(self.originCropPoint.toPoint(), event.scenePos().toPoint())
print(self.currentQRect)
关于python - QGraphicsScene 中 Qrubberband 的渲染错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46113608/
我想做一个选择,所以我用 QRubberband 创建了一个 QRect,一切正常,当我按下按钮时我可以点击图像并进行选择,问题是当我调整窗口大小时选择正在移动,我怎样才能阻止这种行为? import
我正在尝试在 QRubberBand 对象上绘制数字。我有类小部件 QRubberBand 对象 rectangleRubberBand; 我可以显示这个区域等,但我试图在小部件上不的区域绘制一些数字
我正在尝试更改 QRubberBand 的颜色。我试过这个: QRubberBand* rubberBand = new QRubberBand(QRubberBand::Rectangle, thi
我正在尝试在桌面/打开的窗口顶部绘制一个选择区域,使用 QRubberBand 可以很好地工作,但是看到它没有样式表命令,我该怎么办能够改变边框的颜色和宽度并使其内部完全透明吗? 编辑:在 Qt 中是
我有一个“有效”的例子,但有几个问题我似乎无法弄清楚。我计算了橡皮筋内的 topLeft 和 bottomRight 坐标,并将它们转换为小部件坐标。但是 pixmap.copy() 不会复制那些坐标
我有一个可调整大小的橡皮筋,带有拖动 handle ,看起来很有趣。我想将其强制为 4x3 选择矩形。它可以工作,但存在剪裁伪影,并且 handle 不会留在角落里。 代码: class Resiza
我正在尝试创建一个 Qt 应用程序以从屏幕上的选定区域截取屏幕截图。现在我正在使用 QRubberBand 来选择屏幕区域。它是这样工作的。 当点击捕获按钮时,一个覆盖透明的小部件将弹出(全屏但没有框
我发现很少有代码可以演示相交,但主要是按钮。像这样的事情: for child in self.findChildren(QPushButton): if rect.intersects(ch
我想从图像中选择一个区域并获取她的坐标。我已经搜索过,找到了这段代码,它创建了对象橡皮筋,但我无法调整它的大小..奇怪的是,在 linux (lubuntu) 上它可以工作,但在 macOS 上不行.
我有一个带有 GraphicsView 的应用程序,大量的点被绘制到 QGraphicsView 上并使用此代码分配了一些数据 void GUI::paintitem(double x, double
我试图做到这一点,如果用户点击 QGraphicsItem,它会为该项目创建一个 QRubberBand。 我的课上有以下内容: void ImagePixmapItem::mousePressEve
我的 q qrubberband 显示效果不好,认为想要的坐标没问题: class Viewer(QtWidgets.QMainWindow): def __init__(self):
我在这个主题中遇到了同样的问题:QRubberBand在我调整窗口大小时移动,在尝试了几次后,我意识到这个主题的解决方案不适用于QGraphics View。为什么当我调整窗口大小时,我的选择会移动,
我在这个主题中遇到了同样的问题:QRubberBand move when I resize window ,经过几次尝试,我意识到本主题的解决方案不适用于 QGraphics View 。为什么当我
我尝试的是稍微自定义我的自定义 QRubberBand 的外观。我想用透明的蓝色选择矩形背景实现蓝色选择边缘。问题是当我使用 CleanLooks 风格时背景总是透明的,但是当我切换到例如 Windo
我想让我的 QRubberband 实例用户可以调整大小。我看过这个问题here但没有解决方案。 用例是用户可以在照片上拖出一个选择框,然后通过拖动 QRubberband 边距来更改几何图形,或者通
我希望能够使用橡皮筋选择图像的区域,然后移除橡皮筋之外的图像部分并显示新图像。但是,当我目前这样做时,它不会裁剪正确的区域并给我错误的图像。 #include "mainresizewindow.h"
我想在 PyQt 中使用 QRubberBand 和 QRect 通过选取框矩形选择来选择或激活一堆按钮。 如果有人能告诉我如何实现此功能,我将不胜感激? 最佳答案 这是一个简单的演示: from P
我正在用 PyQt 编写一个截图实用程序,想法是截取整个桌面,然后将其显示在 QLabel 中,使窗口全屏,用户通过鼠标选择一个区域。 使用 QLabel 可以有效地做到这一点吗?我希望橡皮筋留在屏幕
我是一名优秀的程序员,十分优秀!