如何获得Dockwiget分离器处理程序?

发布于 2025-02-03 02:12:50 字数 2593 浏览 0 评论 0原文

我想在qdockwidget中获取handle(图片中的红行显示),因此当handle> whand> whand> whens是时,请单击, 移动鼠标事件等等。得到它?

代码示例

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class View(QMainWindow):
    def __init__(self):
        super().__init__()
        self.addDockWidget(Qt.LeftDockWidgetArea, QDockWidget("abc", self))
        self.setCentralWidget(QPushButton("ABC"))

app = QApplication([])
v = View()
v.show()
app.exec()

”在此处输入图像描述”

以下是新更新
qdockwidget中的视图,当鼠标拖动句柄时,我想查看始终显示场景的全局迷你映射,但是使用repezie事件会非常慢。因此,我想获得鼠标 - 发布事件,然后使用fitinview Redraw迷你地图。

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import random
import math

r = lambda : random.randint(0, 255)
r255 = lambda : (r(), r(), r())

class Scene(QGraphicsScene):
    def __init__(self):
        super().__init__()
        for i in range(1000*300):
            item = QGraphicsEllipseItem()
            item.setRect(0, 0, r(), r())
            item.setBrush(QColor(*r255()))
            item.setPos(r()*100, r()*100)
            self.addItem(item)

class MainView(QGraphicsView):
    def wheelEvent(self, event: QWheelEvent) -> None:
        factor = math.pow(2.7, event.angleDelta().y()/360)
        self.scale(factor, factor)
        super().wheelEvent(event)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.scene = Scene()
        self.main = MainView()
        self.main.setDragMode(QGraphicsView.ScrollHandDrag)
        self.side = QGraphicsView()

        self.side.setBackgroundBrush(Qt.black)

        self.main.setScene(self.scene)
        self.side.setScene(self.scene)

        self.setCentralWidget(self.main)

        dock = QDockWidget()
        dock.setWidget(self.side)
        self.addDockWidget(Qt.LeftDockWidgetArea, dock)

        #
        dock.installEventFilter(self)

    def eventFilter(self, w: 'QObject', e: 'QEvent') -> bool:
        if isinstance(e, QResizeEvent):
            self.side.fitInView(self.scene.itemsBoundingRect(), Qt.KeepAspectRatio)
        return super().eventFilter(w, e)

app = QApplication([])
v = MainWindow()
v.show()
app.exec()

I want to get handle in QDockWidget(red line show in picture),So that when handle was click, move, or mouse event and so on.I want to catch it and then do something else,But I can't find how to get it,Can someone know how to get it?

Code Sample

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class View(QMainWindow):
    def __init__(self):
        super().__init__()
        self.addDockWidget(Qt.LeftDockWidgetArea, QDockWidget("abc", self))
        self.setCentralWidget(QPushButton("ABC"))

app = QApplication([])
v = View()
v.show()
app.exec()

enter image description here

Below Is New Update
The view in the QDockWidget,When mouse drag handle,I want to the view always show global mini map of the scene,but use re-szie event will be very slow.So I want to get mouse-release event,then use fitInView redraw mini map.

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import random
import math

r = lambda : random.randint(0, 255)
r255 = lambda : (r(), r(), r())

class Scene(QGraphicsScene):
    def __init__(self):
        super().__init__()
        for i in range(1000*300):
            item = QGraphicsEllipseItem()
            item.setRect(0, 0, r(), r())
            item.setBrush(QColor(*r255()))
            item.setPos(r()*100, r()*100)
            self.addItem(item)

class MainView(QGraphicsView):
    def wheelEvent(self, event: QWheelEvent) -> None:
        factor = math.pow(2.7, event.angleDelta().y()/360)
        self.scale(factor, factor)
        super().wheelEvent(event)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.scene = Scene()
        self.main = MainView()
        self.main.setDragMode(QGraphicsView.ScrollHandDrag)
        self.side = QGraphicsView()

        self.side.setBackgroundBrush(Qt.black)

        self.main.setScene(self.scene)
        self.side.setScene(self.scene)

        self.setCentralWidget(self.main)

        dock = QDockWidget()
        dock.setWidget(self.side)
        self.addDockWidget(Qt.LeftDockWidgetArea, dock)

        #
        dock.installEventFilter(self)

    def eventFilter(self, w: 'QObject', e: 'QEvent') -> bool:
        if isinstance(e, QResizeEvent):
            self.side.fitInView(self.scene.itemsBoundingRect(), Qt.KeepAspectRatio)
        return super().eventFilter(w, e)

app = QApplication([])
v = MainWindow()
v.show()
app.exec()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文