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); 
    } 

这给了我一个带有“名称”标题的列。我如何重命名这个头文件?

QAbstractItemModel::setHeaderData()应该工作。如果不是,则可以始终从QFileSystemModel继承并覆盖headerData()

+3

我只是想相同的(使用'setHeaderData()'),但它没有工作。查看源代码'src/gui/dialogs/qfilesystemmodel.cpp' - 头文件被硬编码在那里:(所以,对'QFileSystemModel'进行子类化并重载'headerData()'是正确的解决方案。 –

快速,但有点使坏(请注意: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); 
    } 
}