カスタムデータを扱うカスタム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を開発しています。
EDIT: pyqtバージョン4.8とpython 2.6で動作するOSX 10.6.8でテストされ、Windows版が動作するようです。
これはLinuxの問題のようです。
あなたの例では、Windows、Qtの4.7.1/4.8.3 PyQtは、Pythonの2.7 – aukaost
ありがとうござい上で私のためにうまく動作するようです。ソフトウェアバージョンを追加しました。たぶんそれは私の古い設定のためです... – salomonderossi