我遇到QFileSystemModel.index
的问题当我从树视图中选择文件或文件夹时,只需单击鼠标,代码就会打印两次选中的项目。
这是我遇到问题的代码的一部分:
import sys
import os
import sip
sip.setapi('QVariant',2)
.....
.....
self.pathRoot = QtCore.QDir.rootPath()
self.model = QtGui.QFileSystemModel(self)
self.model.setRootPath(self.pathRoot)
self.fsindex = self.model.setRootPath(self.model.myComputer())
self.treeView.setModel(self.model)
self.treeView.setRootIndex(self.fsindex)
self.treeView.clicked.connect(self.on_treeView_clicked)
self.treeView.setColumnHidden(3, True)
self.treeView.setColumnHidden(2, True)
self.treeView.setColumnWidth(0, 320)
self.treeView.setColumnWidth(1, 30)
self.treeView.resizeColumnToContents(True)
@QtCore.pyqtSlot(QtCore.QModelIndex)
def on_treeView_clicked(self, index):
indexItem = self.model.index(index.row(), 0, index.parent())
filePath = self.model.filePath(indexItem)
print filePath
答案 0 :(得分:0)
问题是由编译Qt Designer时生成的文件中的以下行引起的。
QtCore.QMetaObject.connectSlotsByName(SOME_OBJECT)
根据docs:
QMetaObject.connectSlotsByName(QObject o)
以递归方式搜索给定对象的所有子对象,以及 将来自它们的匹配信号连接到跟随的对象的插槽 以下表格:
void on_<object name>_<signal name>(<signal parameters>);
让我们来吧 假设我们的对象有一个QPushButton类型的子对象 对象名称button1。用于捕捉按钮的clicked()信号的插槽 将是:void on_button1_clicked();
也就是说它连接插槽和包含该语法的信号,并且在您遇到的情况下,您有2个选项: