如何使用给定路径的内容填充数据列表模型中的数据列表?
这是我正在尝试做的事情:
class TestListModel(QAbstractListModel):
def __init__(self, parent=None):
QAbstractListModel.__init__(self, parent)
self.testnames = []
def load_docfiles(self):
cfg = Config()
for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')):
self.testnames = os.path.basename(filename)[5:-4]
filepath = os.path.abspath(filename)
print "load docfile", str(self.testnames)
return str(self.testnames)
def rowCount(self, index):
return len(self.testnames)
def data(self, index, role):
if role == Qt.DisplayRole:
cfg = Config()
for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')):
self.testnames = os.path.basename(filename)[:-4]
filepath = os.path.abspath(filename)
return self.testnames
def columnCount(self, index):
pass
另一个问题是如何加载与从我的列表视图中选择的项目相关联的html页面(在qwebview中)?
感谢你!!
答案 0 :(得分:1)
我认为你误解了Qt中Model类中data
方法的用途。 data
方法应该将关联的QListView
给出的索引映射到testnames
列表中的项目,而不是重新加载数据(在您的情况下是文件名列表)。例如,
def data(self, index, role):
if role == Qt.DisplayRole:
testname = self.testnames[index.row()]
return testname
您希望load_docfiles
方法在self.testnames
中存储文件名列表。你可以像这样重写它:
def load_docfiles(self):
cfg = Config()
for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')):
self.testnames.append(os.path.basename(filename)[5:-4])
filepath = os.path.abspath(filename)
print "load docfile", str(self.testnames)
然后可以从您的主应用程序中调用您的课程:
self.view = QtGui.QListView(self)
self.model = TestListModel()
self.model.load_docfiles()
self.view.setModel(self.model)