[英]How to add CheckBox on QTreeView + QFileSystemModel
我想在樹視圖中選擇一些不同的文件夾。 QT中有兩種解決方案,如下所示:
QTreeView + QFileSystemModel,但是如何在其中添加樹框? 我一點也不知道。 同時,QFileSystemModel不同步,因此,在選擇文件夾然后展開目錄之后,您會發現未選擇子文件夾。 我該如何解決這個問題?
QTreeView + QDirModel,有一個很好的模型,它運行良好: http : //www.programmershare.com/2041913/但是QDirModel是同步的。 因此,選擇大文件夾時我們必須等待很長時間。 我們可以接受很長時間,但是我怎么知道選擇已完成?
不管怎么說,還是要謝謝你。
您的示例應進行一些調整以使用QFileSystemModel
。
訣竅是將checkedIndexes
設置聲明為mutable
並在CFileSystemModel::data
方法中CFileSystemModel::data
更新。
QVariant CFileSystemModel::data(const QModelIndex &index, int role) const
{
if(role == Qt::CheckStateRole)
{
if (checkedIndexes.contains(index))
{
return checkedIndexes.contains(index) ? Qt::Checked : Qt::Unchecked;
}
else
{
int checked = Qt::Unchecked;
QModelIndex parent = index.parent();
while (parent.isValid())
{
if (checkedIndexes.contains(parent))
{
checked = Qt::Checked;
break;
}
parent = parent.parent();
}
if (checked == Qt::Checked)
{
checkedIndexes.insert(parent);
}
return checked;
}
}
else
{
return QFileSystemModel::data(index, role);
}
}
當您在視圖中打開目錄節點時, QFileSystemModel
開始加載新內容。 加載后,該視圖使用CFileSystemModel::data
函數重新獲取新數據,該函數檢查是否檢查了新節點的錨點,並返回正確的Qt::CheckStateRole
值(並更新了checkedIndexes
集)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.