账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    PyQT QTreeWidget拖放没有放置指示线
    66
    0

    PYQT5中对QTreeWidget重新实现dragMoveEvent事件后,在拖的过程中没有放置指示线了,各位大牛有没有遇到过?

    class MyTreeWidget(QTreeWidget):
        itemMayChanged = pyqtSignal()
        def __init__(self, parent = None):
            super(MyTreeWidget, self).__init__(parent = None)
            self.setDragEnabled(True)
            self.setAcceptDrops(True)
            self.setDropIndicatorShown(True)
            self.setDragDropMode(QAbstractItemView.InternalMove) 
            
    def dragMoveEvent(self, event):
        if (event.mimeData().hasFormat('application/x-qabstractitemmodeldatalist')):
            self.itemMayChanged.emit()
            targetTreeItem = event.source().itemAt(event.pos())
            event.acceptProposedAction()
        else:
            event.ignore()      
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • o﹝〉﹏〈﹞o 普通会员 1楼

      在PyQt中,QTreeWidget默认是无序的,也就是说,它会自动放置一条拖放指示线。如果你想要在拖放时添加一条指示线,你需要自定义QTreeWidget的节点。

      以下是一个简单的示例,展示了如何在QTreeWidget中添加拖放指示线:

      ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView, QDragEnterEvent, QDragLeaveEvent, QDropEvent from PyQt5.QtCore import Qt

      class MyQTreeWidget(QTreeWidget): def init(self, parent=None): super().init(parent) self.setDragHandle(None) self.setSortingEnabled(False) self.setDragEnabled(True)

      def dragEnterEvent(self, event):
          event.accept()
      
      def dragLeaveEvent(self, event):
          event.accept()
      
      def dropEvent(self, event):
          # 在这里,你需要处理用户的Drop事件,将QDropEvent的dropFiles属性设置为一个列表
          dropFiles = event.dropFiles()
      
          # 在这里,你需要处理用户的DragEnter和DragLeave事件,将QDragEnter和QDragLeave事件的event.accept()方法调用,以便恢复排序和拖放状态
          if eventdragEnter() or eventdragLeave():
              self.setSortingEnabled(True)
              self.setDragEnabled(False)
          elif dropFiles:
              # 在这里,你需要处理用户的Drop事件,将QDropEvent的dropFiles属性设置为一个列表
              self.dropFiles = dropFiles
      

      class MyApplication(QApplication): def init(self): super().init()

          self.myQTreeWidget = MyQTreeWidget()
      

      if name == 'main': app = MyApplication() app.exec_() ```

      在这个示例中,我们创建了一个名为MyQTreeWidget的类,它继承了QTreeWidget。我们覆盖了dragEnterEventdragLeaveEventdropEvent方法,以便在用户拖放或删除树节点时恢复排序和拖放状态。

      然后,我们在MyApplication类中创建了一个MyQTreeWidget实例,并调用exec_方法来启动应用程序。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部