2012-05-31 76 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); 
}