我正在编写文件资源管理器,并且使用 QFileSysteModel 作为基础。我注意到方法QFileSystemModel::index()
和QFileSystemModel::fetchMore
导致模型发出信号rowsInserted
。
我已将rowsInserted
信号连接到一个插槽,该插槽发送有关新插入行的数据。问题是来自QFileSystemModel::index()
并且QFileSystemModel::fetchMore
不是真正新的行,而是由 QFileSystemModel 本身添加到模型中的行,这在我的程序中造成了麻烦。
我在使用之前尝试过设置标志QFileSystemModel::index()
,QFileSystemModel::fetchMore
但它并不可靠,尤其是QFileSystemModel::fetchMore
.
喜欢:
m_blockRowInsert = true; // <-- blocks rowInserted for m_fileSysModel->index
auto index = m_fileSysModel->index(pathNew); // calls immediately rowsInserted
if(index.isValid())
{
if(m_fileSysModel->canFetchMore(index))
{
m_blockRowInsert = true;// <-- does not work reliable because rowsInserted can be called more than once by fetchmore
m_fileSysModel->fetchMore(index); // <-- calls rowsInserted after completing the function
}
}
我试图像这样重置标志:
void onRowsInserted(const QModelIndex &parent, int first, int last)
{
if(m_blockRowInsert)
{
m_blockRowInsert = false;
return;
}
}