QTreeView / QFileSystemModel устанавливает метки заголовков

Довольно простая задача, но мне не удалось найти ничего полезного в документации. Я хочу, чтобы QTreeView содержал один столбец с именем «Файлы» с данными из QFileSystemView. Вот что у меня есть:

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

Это дает мне один столбец с заголовком «Имя». Как переименовать этот заголовок?


person jaho    schedule 15.11.2012    source источник


Ответы (3)


QAbstractItemModel::setHeaderData() должно работать. Если нет, вы всегда можете наследовать от QFileSystemModel и переопределить headerData().

person Stephen Chu    schedule 15.11.2012
comment
Я только что попробовал то же самое (используя setHeaderData()), но это не сработало. Посмотрел источник src/gui/dialogs/qfilesystemmodel.cpp - заголовки там жестко закодированы :( Итак, подкласс QFileSystemModel и переопределение headerData() - правильное решение. - person Andreas Fester; 16.11.2012

Быстрый, но немного грязный трюк (обратите внимание на 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();
}
person Kirill Gamazkov    schedule 27.01.2013

Вы можете создать подкласс 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);
    }
}
person Roberto Mier    schedule 27.08.2013