【发布时间】:2018-08-30 12:37:59
【问题描述】:
我正在尝试使用选择 (QModelIndexList) 来检查 QTreeView 的所有选定项。
我在索引上使用setData 和Qt::CheckStateRole,数据似乎已更新。
我发出dataChanged 信号但树没有重绘(有和没有作为参数给出的角色)。
这是选择模型的问题吗?
如果我这样做 beginResetModel 会起作用,但我的树会倒塌,这会破坏交易。
我怎样才能重新粉刷我的物品?
这是我在模型中添加的方法
void MyModel::checkSelectedItems( const QModelIndexList &checkedIndexes, bool check )
{
QVector<int> roles = QVector<int>() << Qt::CheckStateRole;
for ( const QModelIndex &index : checkedIndexes)
{
setData(index, check ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole);
emit dataChanged(index, index); //), roles);
}
}
以及对它的调用:
myModel->checkSelectedItems( myTree->selectionModel()->selectedIndexes(), true );
通话后,选择是灰色的(不再是蓝色),但仍然“选中”。单击任意位置刷新树并正确显示选中的项目。
【问题讨论】:
-
在
myModel->checkSelectedItems( myTree->selectionModel()->selectedIndexes(), true );之后写myTree->update();。 -
这似乎并没有解决问题,还尝试使用修改后的索引调用
myTree->update(index)。 -
对不起!在这一刻,我没有更多的想法。我稍后会再次检查。
-
别担心,值得一试,谢谢提示!
-
myTree->repaint()解决了这个问题,但我不确定这是不是正确的方法。
标签: qt model qtreeview qabstractitemmodel