2011-01-11 2 views
1

У меня есть qlistview, редактирование которого производится в qtableview с помощью делегата. Когда появится qtableview, я хотел бы, чтобы qlistview изменил размер своей строки, чтобы соответствовать всем qtableview. Вот код:Как сделать QListView изменить размер своих элементов в соответствии с размером редактора

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() 

ответ

0

Виджет вы должны пытаться изменить размер является редактором, что сказанное

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() 

Другое дело, что с QMainWindow вы должны использовать setCentralWidget

+0

Спасибо armonge, но я действительно хочу * * изменить размер строки qlistview. С вашим кодом редактор охватывает другие строки, скрывая их. И также спасибо за подсказку setCentralWidget. – Tiago