我使用python 3.6和pyqt5并通过self.ui = uic.loadUi("MainWindow.ui",self)
加载我的窗口主要有2个QtreeViews和一个QList Widgets。我遇到dropEvent
的问题。我必须将它分离到每个Widget /模型,以便我有不同的'dropActions'。但每次我放弃时,我都会接到来自dropEvent
self.ui Object
的{{1}}功能的电话,我试图将self.ui.treeView.viewport().installEventFilter(self)
更改为单独的功能而没有成功。在文档中以及在此处和网上发现的一些示例中,存在具有拖放功能的 Widgets子类。但我找不到uic loader生成的Widgets的解决方案。我曾尝试在模型中安装拖放功能。但是根本没有运气。
如何对uic.loadUi
加载的Widget进行子类化?
或
如何创建规则从哪里到哪里拖动&允许丢弃?
答案 0 :(得分:0)
最简单的方法是事先进行子类化。
按如下方式创建my_tree_view.py
from PyQt5 import QtWidgets, QtGui
class MyTreeView(QtWidgets.QTreeView):
def __init__(self, parent=None):
super().__init__(parent)
def dropEvent(self, event: QtGui.QDropEvent):
print('MyTreeView dropEvent')
super().dropEvent(event)
然后编辑.ui文件,并在</widget>
行之后的最后添加以下内容。
<customwidgets>
<customwidget>
<class>MyTreeView</class>
<extends>QTreeView</extends>
<header>my_tree_view</header>
</customwidget>
</customwidgets>
然后更改以下行(在.ui文件中更进一步) 从
<widget class="QTreeView" name="treeView">
到
<widget class="MyTreeView" name="treeView">