2012-05-31 48 views
0

我已经将QFileSystemModel绑定到QTreeView。 QFileSystemModel readOnly设置为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); 
}