PyQt4 QFileSystemModel重复索引

时间:2017-10-01 23:23:15

标签: python-2.7 pyqt4 qtreeview qfilesystemmodel

我遇到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

1 个答案:

答案 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个选项:

  • 删除您建立的连接。
  • 或重命名您的广告位。