标签: qfilesystemmodel

QFileSystemModel setRootPath

我正在尝试创建一个Qt应用程序,它显示文件夹的内容(Mac OS中的"Users"文件夹).这是代码:

QFileSystemModel *dirModel = new QFileSystemModel;
dirModel->setRootPath("/Users");

ui->listView->setModel(dirModel);
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用这段代码

当我运行应用程序时,它不显示"/ Users"文件夹的内容,而是显示根驱动器(注意:不是驱动器的内容).该文件夹确实存在,我也尝试使用其他文件夹.

c++ macos qt qtreeview qfilesystemmodel

11
推荐指数
2
解决办法
7995
查看次数

PyQt:QFileSystemModel 复选框过滤器

我正在尝试使用 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)

python filtering pyqt qfilesystemmodel

9
推荐指数
0
解决办法
1471
查看次数

PyQt:删除不必要的列

我正在使用QTreeView和QFileSystemModel.它显示大小,类型,修改日期等列,我不需要.如何从视图中删除它们?我removeColumn在模型或视野中找不到任何东西.

python qt qtreeview qfilesystemmodel

8
推荐指数
2
解决办法
2422
查看次数

默认情况下,在qlistview中选择第一项

任何人都可以告诉我如何在每次点击项目时设置qlistview的第一项?我正在使用qfilesystemmodel和qListView.基本上我希望默认情况下选择模型显示的第一个项目.

qt qlistview qfilesystemmodel

7
推荐指数
2
解决办法
5670
查看次数

Python PyQt QFileSystemModel根路径

这是我必须显示名为"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文件"只显示项目目录?

python pyqt pyqt4 qfilesystemmodel

6
推荐指数
1
解决办法
5077
查看次数

QFileSystemModel rowCount 未按预期工作

我正在尝试模型/视图编程中的一个示例。

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 …

c++ qt rowcount qfilesystemmodel

6
推荐指数
1
解决办法
2089
查看次数

如何在后台线程中为QFileSystemModel创建自定义图标

我在qt中为一些自定义设计文件制作文件浏览器.我想加载他们的预览作为他们的缩略图,因此我QIconProvider用来将Icon返回给我QFileSystemModel.

问题是创建的算法QIcon需要一些资源,因此我的应用程序在完成加载所有缩略图之后才会响应.

我想知道是否有任何方法可以将我QIconProvider放在后台线程中,以便我的应用程序响应.

qt thumbnails qfilesystemmodel background-thread qicon

6
推荐指数
2
解决办法
824
查看次数

有条件地更改连接到QFileSystemModel的QListView中的文件颜色

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的子类化,

  • 有没有办法通过漂亮的选择和图标来恢复原始行为?
  • 有谁知道哪个ItemDelegate最初用于QListView中的QFileSystemModel以及如何使用它?
  • 是否可以获取其源代码并从那里复制paint方法?

这是一个使用子类的最小代码,并显示了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)

python pyqt qitemdelegate qfilesystemmodel

6
推荐指数
1
解决办法
549
查看次数

在 QFileSystemModel() 中列出文件的最佳方法?

我正在开始 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)

qt qlistview pyside qfilesystemmodel

5
推荐指数
1
解决办法
2652
查看次数

QFileSystemModel 自定义图标?

在我的项目中,我有一个 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)

这:

在此输入图像描述

变成:

在此输入图像描述

如何只更改文件的图标?

谢谢你的时间 :)

c++ icons qt qfilesystemmodel

5
推荐指数
1
解决办法
3106
查看次数