如何使QListView根据编辑器大小调整项目尺寸
我有一个叫做qlistview的列表视图,它的编辑是在一个叫做qtableview的表格视图中进行的,使用了一种叫做委托的方式。当qtableview显示出来时,我希望qlistview的行能够自动调整大小,以适应qtableview的内容。以下是相关的代码:
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()
1 个回答
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这个方法。