我正在尝试创建一个Qt应用程序,它显示文件夹的内容(Mac OS中的"Users"文件夹).这是代码:
QFileSystemModel *dirModel = new QFileSystemModel;
dirModel->setRootPath("/Users");
ui->listView->setModel(dirModel);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用这段代码
当我运行应用程序时,它不显示"/ Users"文件夹的内容,而是显示根驱动器(注意:不是驱动器的内容).该文件夹确实存在,我也尝试使用其他文件夹.
我正在尝试使用 python/pyqt 创建一个实用程序,以从 a 创建 *.tar 存档QFileSystemModel(仅包括那些被检查的项目)。现在我想要控制QFileSystemModel复选框以使用文件名/文件类型/文件大小进行过滤。
如何QFileSystemModel使用通配符搜索文件名/文件类型/文件大小来选中/取消选中类外的复选框?
class CheckableDirModel(QtGui.QFileSystemModel):
def __init__(self, parent=None):
QtGui.QFileSystemModel.__init__(self, None)
self.checks = {}
def data(self, index, role=QtCore.Qt.DisplayRole):
if role != QtCore.Qt.CheckStateRole:
return QtGui.QFileSystemModel.data(self, index, role)
else:
if index.column() == 0:
return self.checkState(index)
def flags(self, index):
return QtGui.QFileSystemModel.flags(self, index) | QtCore.Qt.ItemIsUserCheckable
def checkState(self, index):
if index in self.checks:
return self.checks[index]
else:
return QtCore.Qt.Checked
def setData(self, index, value, role):
if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
self.checks[index] = value
self.emit(QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), …Run Code Online (Sandbox Code Playgroud) 我正在使用QTreeView和QFileSystemModel.它显示大小,类型,修改日期等列,我不需要.如何从视图中删除它们?我removeColumn在模型或视野中找不到任何东西.
任何人都可以告诉我如何在每次点击项目时设置qlistview的第一项?我正在使用qfilesystemmodel和qListView.基本上我希望默认情况下选择模型显示的第一个项目.
这是我必须显示名为"C:\ Myfolder"的目录的树视图的代码.
import sys
from PyQt4 import QtGui,QtCore
class Myview(QtGui.QMainWindow):
def __init__(self,parent=None):
QtGui.QMainWindow.__init__(self)
model = QtGui.QFileSystemModel()
model.setRootPath('C:\Myfolder')
view = QtGui.QTreeView()
view.setModel(model)
self.setCentralWidget(view)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
myview = Myview()
myview.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
即使我将其设置RootPath为"C:\ Myfolder",树视图也会显示所有驱动器和文件夹.
我怎么能限制QFileSystemModel,使TreeView里面的"C:\ MyFolder文件"只显示项目目录?
我正在尝试模型/视图编程中的一个示例。
http://doc.qt.io/qt-5/model-view-programming.html
为了演示如何使用模型索引从模型中检索数据,我们设置了一个没有视图的 QFileSystemModel,并在小部件中显示文件和目录的名称。尽管这没有显示使用模型的正常方式,但它演示了模型在处理模型索引时使用的约定。
我们通过以下方式构建文件系统模型:
QFileSystemModel *model = new QFileSystemModel;
QModelIndex parentIndex = model->index(QDir::currentPath());
int numRows = model->rowCount(parentIndex);
Run Code Online (Sandbox Code Playgroud)
在本例中,我们设置一个默认的 QFileSystemModel,使用该模型提供的 index() 的特定实现获取父索引,并使用 rowCount() 函数计算模型中的行数。
这是我的代码:
QFileSystemModel* model = new QFileSystemModel;
QModelIndex parentIndex = model->index(QDir::currentPath());
qDebug() << QDir::currentPath();
// "/media/Local Data/Files/Programming/C++/build-DemostrateQModelIndex-Desktop_Qt_5_5_1_GCC_64bit-Debug"
qDebug() << "RowCount is " << model->rowCount(parentIndex);
Run Code Online (Sandbox Code Playgroud)
但 RowCount 始终为 0。
在“build-DemostrateQModelIndex-Desktop_Qt_5_5_1_GCC_64bit-Debug”文件夹中,里面有文件和文件夹。我预计行数应该是里面的项目数。
我还尝试初始化 QFileSystemModel;
QFileSystemModel* model = new QFileSystemModel;
model->setRootPath(QDir::rootPath());
QModelIndex parentIndex = model->index(QDir::currentPath());
qDebug() << "RowCount is " << model->rowCount(parentIndex);
Run Code Online (Sandbox Code Playgroud)
RowCount 仍然为 0。
更新 1:应用 Johannes Schaub 的建议。我QEventLoop …
我在qt中为一些自定义设计文件制作文件浏览器.我想加载他们的预览作为他们的缩略图,因此我QIconProvider用来将Icon返回给我QFileSystemModel.
问题是创建的算法QIcon需要一些资源,因此我的应用程序在完成加载所有缩略图之后才会响应.
我想知道是否有任何方法可以将我QIconProvider放在后台线程中,以便我的应用程序响应.
我QListView有一个QFileSystemModel.根据a中的选择QTreeView,QListView显示文件夹的内容.
现在我需要根据某些条件更改文件名的颜色.
最初的想法是迭代QListView中的项目,并根据条件是否满足来设置每个项目的颜色.然而这似乎是不可能的,因为只接受改变的setData()方法,忽略像[见这个 ]的 东西QFileSystemModelEditRole
self.FileModel.setData(index, QtGui.QBrush(QtCore.Qt.red), role=QtCore.Qt.ForegroundRole)
Run Code Online (Sandbox Code Playgroud)
这也被指出了这里
,并在后者的建议是,子类QItemDelegate用于着色的而QListView项目的目的.
因此,如果满足条件,我将子类化QStyledItemDelegate并重新实现其paint()方法以绿色显示文件名 - 这很好.然而它现在看起来有点丑陋:文件图标丢失,"mouse_over"效果不再起作用.
虽然这个子类化无论如何都是一个混乱的解决方法,但我的顶级问题是
QListView连接的项目着色QFileSystemModel?现在规定可能不是这种情况并且坚持QItemDelegate的子类化,
这是一个使用子类的最小代码,并显示了descibed行为.它使用QLineEdit可以键入字符串的位置,以便包含该字符串的所有文件都以绿色突出显示.
import sys
from PyQt4 import QtGui, QtCore
class MyFileViewDelegate(QtGui.QStyledItemDelegate ):
def __init__(self, parent=None, *args, **kwargs):
QtGui.QItemDelegate.__init__(self, parent, *args)
self.condition = None
self.isMatch = False
self.brush_active = QtGui.QBrush(QtGui.QColor("#79b9ed"))
self.brush_active_matched = QtGui.QBrush(QtGui.QColor("#58cd1c"))
self.pen = QtGui.QPen(QtGui.QColor("#414141") ) …Run Code Online (Sandbox Code Playgroud) 我正在开始 Qt/pySide 编程,并尝试以 QFileSystemModel 作为模型实现一个简单的 QListView。我已经完成了这项工作,并且还在模型上定义了一个名称过滤器。我想获取 QListView (或者更确切地说是底层模型)中所有文件的列表。
下面的代码似乎可以做到这一点,但是非常丑陋,而且不可能是正确的方法。帮助!
model = myQListView.model()
idx = model.index(model.rootPath())
for i in range(0, model.rowCount(idx)):
child = idx.child(i, idx.column())
print model.fileName(child)
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我有一个 QTreeView 显示我的驱动器上的位置。我需要将文件的所有图标更改为自定义图标,但保留文件夹。
我重新实现了 QFileSystemModel 并且能够更改所有图标。有什么方法可以限制仅更改文件而不是文件夹吗?
QVariant MyQFileSystemModel::data(const QModelIndex& index, int role) const
{
if(role == Qt::DecorationRole)
return QPixmap(":/icons/TAG_Int.png");
return QFileSystemModel::data(index, role);
}
Run Code Online (Sandbox Code Playgroud)
这:

变成:

如何只更改文件的图标?
谢谢你的时间 :)