gpt4 book ai didi

qt - QFileSystemModel 和 QTreeView 仅显示目录。如何隐藏空目录的扩展标记?

转载 作者:行者123 更新时间:2023-12-02 05:16:39 25 4
gpt4 key购买 nike

我正在构建有点像标准文件资源管理器 - 左 Pane 用于文件夹树,右 Pane 用于显示所选文件夹中的文件。

QTreeView 和QFileSystemModel 用于显示文件夹。模型的过滤器设置为 QDir::Dirs | QDir::NoDotAndDotDot 只列出目录,没有文件。我只想对具有子文件夹的文件夹显示扩展标记,即。 e.如果某些目录为空或仅包含文件,则它不应该是可扩展的。但是相反, TreeView 保留空目录的扩展标记。这就是问题所在:如何隐藏它们

我已经在此处、谷歌和 QT 示例中搜索了解决方案 - 没有成功。虽然我认为这个问题很容易回答。目前我唯一的解决方案是子类化 QAbstractItemModel。那是痛苦。

QT 4.8、QT Creator、C++。

下面是演示代码:

#include <QApplication>

#include <QFileSystemModel>
#include <QTreeView>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QTreeView w;

QFileSystemModel m;
m.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
m.setRootPath("C:\\");

w.setModel(&m);
w.setRootIndex(m.index(m.rootPath()));
w.hideColumn(3);
w.hideColumn(2);
w.hideColumn(1);

w.show();

return a.exec();
}

最佳答案

最简单的方法:juste 像这样实现 hasChildren:

/*!
* Returns true if parent has any children and haven't the Qt::ItemNeverHasChildren flag set;
* otherwise returns false.
*
*
* \remarks Reimplemented to avoid empty directories to be collapsables
* and to implement the \c Qt::ItemNeverHasChildren flag.
* \see rowCount()
* \see child()
*
*/
bool YourModelName::hasChildren(const QModelIndex &parent) const
{
// return false if item cant have children
if (parent.flags() & Qt::ItemNeverHasChildren) {
return false;
}
// return if at least one child exists
return QDirIterator(
filePath(parent),
filter() | QDir::NoDotAndDotDot,
QDirIterator::NoIteratorFlags
).hasNext();
}

关于qt - QFileSystemModel 和 QTreeView 仅显示目录。如何隐藏空目录的扩展标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com