亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

QRubberBand.geometry().intersects(???

QRubberBand.geometry().intersects(???

汪汪一只貓 2022-01-18 15:48:21
我發現很少有演示代碼intersects,但主要是按鈕。像這樣的東西:for child in self.findChildren(QPushButton):    if rect.intersects(child.geometry( )):        selected.append(child)但是,如何在 GraphicsScene 中找到與“Marquee”選擇(QRubberBand)相交的圖像?我嘗試用 QPixmap、QGraphicsScene、QGraphicsPixmapItem 替換 findChildren(QPushButton),它總是給我返回空列表。
查看完整描述

1 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

如果您正在使用具有 QGraphicsView 的 QRubberBand,則必須使用 RubberBandChanged 信號,并且在 items 方法旁邊,您將獲得 QRubberBand 下方的項目。


from PyQt5 import QtCore, QtGui, QtWidgets

import random



def create_pixmap():

    pixmap = QtGui.QPixmap(100, 100)

    pixmap.fill(QtGui.QColor(*random.sample(range(255), 3)))

    return pixmap



class GraphicsView(QtWidgets.QGraphicsView):

    def __init__(self, parent=None):

        super(GraphicsView, self).__init__(parent)

        self.setScene(QtWidgets.QGraphicsScene(self))

        self.setDragMode(QtWidgets.QGraphicsView.RubberBandDrag)

        self.rubberBandChanged.connect(self.on_rubberBandChanged)


        for _ in range(5):

            item = QtWidgets.QGraphicsPixmapItem(create_pixmap())

            item.setPos(*random.sample(range(500), 2))

            self.scene().addItem(item)


    @QtCore.pyqtSlot("QRect", "QPointF", "QPointF")

    def on_rubberBandChanged(

        self, rubberBandRect, fromScenePoint, toScenePoint

    ):

        r = QtCore.QRectF(fromScenePoint, toScenePoint)

        selected = self.items(rubberBandRect)

        print(selected)



if __name__ == "__main__":

    import sys


    app = QtWidgets.QApplication(sys.argv)

    w = GraphicsView()

    w.resize(640, 480)

    w.show()

    sys.exit(app.exec_())

如果您使用另一個 QRubberBand,則邏輯與此類似,因為您必須使用QGraphicsView的items()方法


from PyQt5 import QtCore, QtGui, QtWidgets

import random



def create_pixmap():

    pixmap = QtGui.QPixmap(100, 100)

    pixmap.fill(QtGui.QColor(*random.sample(range(255), 3)))

    return pixmap



class GraphicsView(QtWidgets.QGraphicsView):

    def __init__(self, parent=None):

        super(GraphicsView, self).__init__(parent)

        self.setScene(QtWidgets.QGraphicsScene(self))

        self._rubberBand = QtWidgets.QRubberBand(

            QtWidgets.QRubberBand.Rectangle, self.viewport()

        )

        self._rubberBand.hide()

        self._origin = QtCore.QPoint()


        for _ in range(5):

            item = QtWidgets.QGraphicsPixmapItem(create_pixmap())

            item.setPos(*random.sample(range(500), 2))

            self.scene().addItem(item)


    def mousePressEvent(self, event):

        self._origin = event.pos()

        self._rubberBand.setGeometry(QtCore.QRect(self._origin, QtCore.QSize()))

        self._rubberBand.show()

        super(GraphicsView, self).mousePressEvent(event)


    def mouseMoveEvent(self, event):

        self._rubberBand.setGeometry(

            QtCore.QRect(self._origin, event.pos()).normalized()

        )


    def mouseReleaseEvent(self, event):

        self._rubberBand.setGeometry(

            QtCore.QRect(self._origin, event.pos()).normalized()

        )

        selected = self.items(self._rubberBand.geometry())

        print(selected)

        self._rubberBand.hide()



if __name__ == "__main__":

    import sys


    app = QtWidgets.QApplication(sys.argv)

    w = GraphicsView()

    w.resize(640, 480)

    w.show()

    sys.exit(app.exec_())


查看完整回答
反對 回復 2022-01-18
  • 1 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號