2011-07-28 6 views
2

カスタムデータを扱うカスタム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の問題のようです。

+0

あなたの例では、Windows、Qtの4.7.1/4.8.3 PyQtは、Pythonの2.7 – aukaost

+0

ありがとうござい上で私のためにうまく動作するようです。ソフトウェアバージョンを追加しました。たぶんそれは私の古い設定のためです... – salomonderossi

答えて

0

私はLinuxでもうまく動作していると思いますが、私はちょうどpyqt 4.3とpython 2.7でubuntu 12.04をテストしました。たぶん2.5で問題になるかもしれませんが、私はそれについては分かりません。

1
You need to invoke super differently... 

import sys 
from PyQt4 import QtGui, QtCore 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.list_test = TestListWidget(self) 
     self.setCentralWidget(self.list_test) 

class TestListWidget(QtGui.QListWidget): 
    def __init__(self, parent=None): 
     super(TestListWidget, 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(TestListItem, 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_() 
関連する問題