【问题标题】:Widget dragging not working when hovering over the widget itself将鼠标悬停在小部件本身上时,小部件拖动不起作用
【发布时间】:2021-02-23 16:27:31
【问题描述】:

我遇到了一个问题,我使用 eventFilter() 为小部件实现了拖动功能,但是当我向右拖动并且我的光标悬停在小部件上时,我的情况似乎是 QPushButton停止跟踪,直到我将鼠标悬停在小部件之外

我该如何解决这个问题?

class widget1(QWidget):
    def __init__(self):
        super().__init__()

        self.widget = QPushButton("button0", self)



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.createbutton = QPushButton('+', self)
        self.createbutton.setGeometry(5, 5, 15, 15)
        self.createbutton.clicked.connect(self.createWidget)



        self.show()


    def createWidget(self):

        self.new_widget = widget1()
        self.new_widget.setParent(self)
        self.new_widget.show()
        self.new_widget.installEventFilter(self)


    def eventFilter(self, source, event):

        if event.type() == QEvent.MouseMove:

            MousePos = QPoint(event.pos())

            if event.buttons() == Qt.LeftButton:

                source.move(source.x() + MousePos.x(), source.y() + MousePos.y())



        return super(MainWindow, self).eventFilter(source, event)

基本上我有一个类,其中有一个名为 widget1() 的小部件(这将是我将来的自定义小部件)然后我每次按 @987654327 时将其动态添加到窗口中@ 使用.show() 而不是使用布局,然后将事件过滤器安装到它,以便它可以允许拖动。

【问题讨论】:

    标签: python python-3.x pyqt5


    【解决方案1】:

    事件过滤器正在接收 widget1 实例的事件,但不接收其子小部件(即 QPushButton)的事件。一个快速的解决方法是为 QPushButton 的 mouseMoveEvent 调用 QMouseEvent.ignore,以便鼠标事件将向上传播到父窗口小部件并在事件过滤器中接收。

    class widget1(QWidget):
        def __init__(self):
            super().__init__()
    
            self.widget = QPushButton("button0", self)
            self.widget.mouseMoveEvent = lambda event: event.ignore()
    

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多