2012-05-31 4 views
0

Я связал QFileSystemModel с QTreeView. QFileSystemModel имеет только установленное значение false, поэтому пользователь может переименовывать файлы ... Однако я не хочу, чтобы пользователь случайно переименовал файл и забыл его расширение, поскольку это приведет к его исключению из QTreeView, поскольку я фильтрую типы файлов ...Как скрыть расширения файлов на QFileSystemModel

Как скрыть расширения файлов, сохраняя функциональность переименования?

Благодаря

+0

Пожалуйста, поставить некоторые кусок кода – ScarCode

ответ

0

Вы должны создать пункт делегата для конкретной ситуации, и связать его с вашей точки зрения.

Как указано в документации here

void QAbstractItemView::setItemDelegate(QAbstractItemDelegate * delegate)

Устанавливает пункт делегата для этого представления и его модель делегирования. Это полезно, если вы хотите получить полный контроль над редактированием и отображением элементов.

Этот делегат будет ответственным за отображение имени файла без расширения и разрешить редактирование имени файла.

2

попробовать переописать data() и setData() для роли Qt::EditRole:

virtual QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const 
{ 
if (role == Qt::EditRole) 
    { 
    return QVariant(fileName(index)); 
    } 
else 
    return QFileSystemModel::data(index, role); 
} 

virtual bool setData (const QModelIndex & idx, const QVariant & value, int role = Qt::EditRole) 
{ 
if (role == Qt::EditRole) 
    { 
    return QFileSystemModel::setData(idx, QVariant(value.toString() + fileInfo(idx).completeSuffix()), role); 
    } 
else 
    return QFileSystemModel::setData(idx, value, role); 
} 
Смежные вопросы