我想实现自定义QListWidget来处理自定义数据。我已经找到了如何在QListWidget中显示自定义小部件。pyqt linux QListWidget与自定义小部件的拖放消失
但是,当您拖放一个项目时,该项目消失。这是一个简单的例子来展示问题。
import sys
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(QtGui.QMainWindow, self).__init__(parent)
self.list_test = TestListWidget(self)
self.setCentralWidget(self.list_test)
class TestListWidget(QtGui.QListWidget):
def __init__(self, parent=None):
super(QtGui.QListWidget, self).__init__(parent)
self.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
self.set_model_testdata()
def set_model_testdata(self):
for i in range(0, 4):
item = QtGui.QListWidgetItem(self)
item_widget = TestListItem("testitem %s" % i, self)
item.setSizeHint(item_widget.sizeHint())
self.addItem(item)
self.setItemWidget(item, item_widget)
class TestListItem(QtGui.QWidget):
def __init__(self, name, parent=None):
super(QtGui.QWidget, self).__init__(parent)
item_name_label = QtGui.QLabel("Name:")
item_name = QtGui.QLineEdit()
item_name.setText(name)
vert = QtGui.QVBoxLayout()
vert.addWidget(item_name_label)
vert.addWidget(item_name)
self.setLayout(vert)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
app.exec_()
你能帮我搞点拖吗?
我不明白如何使用QTreeView显示自定义小部件,因为您必须处理模型和委托。也许有人可以在这里展示一个如何处理QTreeView的小例子?
编辑: 我正在使用pyqt版本4.3和python 2.5的Ubuntu的工作。
编辑: 测试OSX 10.6.8与pyqt版本4.8和python 2.6作品和Windows版本似乎工作。
它看起来像是一个linux问题。
你的例子似乎工作得很好,我在Windows上,Qt的4.7.1/4.8.3的PyQt,Python 2.7版 – aukaost
谢谢。我添加了我的软件版本。也许这是由于我的旧配置... – salomonderossi