2011-01-11 14 views
1

Ich habe eine qlistview, deren Bearbeitung in einer qtableview, mittels eines Delegaten gemacht. Wenn die qtableview angezeigt wird, möchte ich, dass die Größe der Zeile in der qlistview so geändert wird, dass sie auf alle von qtableview passt. Hier ist der Code:Wie man eine QListView Größe seiner Elemente entsprechend Editor Größe

import sys 
from PyQt4 import QtGui, QtCore 

class MyDelegate(QtGui.QStyledItemDelegate): 
    def createEditor(self, parent, option, index): 
     mtview = QtGui.QTableView(parent) 
     mtview.verticalHeader().setVisible(False) 
     mtview.horizontalHeader().setVisible(False) 
     mtmodel = QtGui.QStandardItemModel() 
     mtview.setModel(mtmodel) 
     return mtview 
    def setEditorData(self, editor, modelindex): 
     editor.parent().setMinimumSize(400,400) 
     mtmodel = editor.model() 
     for x in range(5): 
      for y in range(5): 
       mtmodel.setItem(x,y,QtGui.QStandardItem("%s, %s" % (x, y))) 

class MyApp(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.resize(200, 200) 
     self.listview = QtGui.QListView(self) 
     self.listview.setGeometry(QtCore.QRect(0,0,200,200)) 
     self.listview.setItemDelegate(MyDelegate()) 
     listmodel = QtGui.QStandardItemModel() 
     t = '123456789' 
     for x in range(10): 
      itemmodel=QtGui.QStandardItem(t) 
      listmodel.appendRow(itemmodel) 
     self.listview.setModel(listmodel) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    mw = MyApp() 
    mw.show() 
    app.exec_() 

if __name__=="__main__": 
    main() 

Antwort

0

Das Widget Sie versuchen sollten, um die Größe ist der Editor, dass gesagt wird

import sys 
from PyQt4 import QtGui, QtCore 

class MyDelegate(QtGui.QStyledItemDelegate): 
    def createEditor(self, parent, option, index): 
     mtview = QtGui.QTableView(parent) 
     mtview.verticalHeader().setVisible(False) 
     mtview.horizontalHeader().setVisible(False) 
     mtmodel = QtGui.QStandardItemModel() 
     mtview.setModel(mtmodel) 
     return mtview 

    def setEditorData(self, editor, modelindex): 
     editor.resize(400,400) 
     mtmodel = editor.model() 
     for x in range(5): 
      for y in range(5): 
       mtmodel.setItem(x,y,QtGui.QStandardItem("%s, %s" % (x, y))) 

class MyApp(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyApp, self).__init__(parent) 
     self.setMinimumSize(200, 200) 
     self.listview = QtGui.QListView() 
     self.listview.setItemDelegate(MyDelegate()) 
     listmodel = QtGui.QStandardItemModel() 

     self.setCentralWidget(self.listview) 
     t = '123456789' 
     for x in range(10): 
      itemmodel=QtGui.QStandardItem(t) 
      listmodel.appendRow(itemmodel) 
     self.listview.setModel(listmodel) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    mw = MyApp() 
    mw.show() 
    app.exec_() 

if __name__=="__main__": 
    main() 

Andere Sache ist, dass mit QMainWindow Sie setCentralWidget verwenden sollten

+0

Danke armonge, aber was ich wirklich will * ist * die Größe von qlistview row. Mit Ihrem Code überspannt der Editor die anderen Zeilen und versteckt sie. Und danke auch für den setCentralWidget Tipp. – Tiago

Verwandte Themen