2

カスタム データを処理するカスタム QListWidget を実装しようとしています。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の問題のようです。

4

2 に答える 2

0

Linuxでも問題なく動作していると思います。pyqt 4.3とpython 2.7を使用してubuntu 12.04でテストしました。2.5の問題かもしれませんが、それについてはわかりません。

于 2012-06-25T05:39:52.223 に答える