美好的一天,我有 QTreeView 和一些后台线程,而不是 GUI 线程在模型项中添加,问题是当显示我的视图子指示器时不重新绘制但它们存在(如果你按下它们放置展开节点的位置),我发出信号dataChange
,但我的孩子指示器没有重绘。
我究竟做错了什么?这是我调用的后台线程中的代码:
void notify()
{
if (file_item_type::parent())
{
file_item_type::parent()->notify(this);
}
file_item_type::filesystem_type::s_notify.dataChange(this);
}
然后在模型中
void FileItemModel::dataChangeItem(void *it)
{
file_item_type *item = static_cast<file_item_type*>(it);
if(item&&isWatchedDir(item))
{
int row = indexOfChild(item);
if (row>=0)
{
QModelIndex indexT = createIndex(row, eDC_Name, item);
QModelIndex indexL = createIndex(row, eDC_Size, item);
emit dataChanged(indexT,indexL);
}
}
}
dataChanged
然后我在代理模型中捕捉到我的信号
void FileProxyTreeModel::sourceDataChanged( const QModelIndex& from,
const QModelIndex& to )
{
emit dataChanged( mapFromSource( from ), mapFromSource( to ) );
}