QTreeView/QFileSystemModel设置标题标签
问题描述:
非常简单的任务,但我没有设法找到任何有用的文档。我希望QTreeView包含一个名为“Files”的列,其中包含来自QFileSystemView的数据。这里是我得到的:QTreeView/QFileSystemModel设置标题标签
QFileSystemModel *projectFiles = new QFileSystemModel();
projectFiles->setRootPath(QDir::currentPath());
ui->filesTree->setModel(projectFiles);
ui->filesTree->setRootIndex(projectFiles->index(QDir::currentPath()));
// hide all but first column
for (int i = 3; i > 0; --i)
{
ui->filesTree->hideColumn(i);
}
这给了我一个带有“名称”标题的列。我如何重命名这个头文件?
答
快速,但有点使坏(请注意:w.hideColumn()):
#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();
}
答
你也可以继承QFileSystemModel和超越控制方法headerData()。例如,如果你想只改变第一首标,并留下其原始值的休息,你可以这样做:
QVariant MyFileSystemModel::headerData(int section, Qt::Orientation orientation, int role) const {
if ((section == 0) && (role == Qt::DisplayRole)) {
return "Folder";
} else {
return QFileSystemModel::headerData(section,orientation,role);
}
}
我只是想相同的(使用'setHeaderData()'),但它没有工作。查看源代码'src/gui/dialogs/qfilesystemmodel.cpp' - 头文件被硬编码在那里:(所以,对'QFileSystemModel'进行子类化并重载'headerData()'是正确的解决方案。 –