我正在尝试使用选择(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 );
通话后,选择为灰色(不再是蓝色),但仍为“已选择”。单击任意位置刷新树,并正确显示选中的项目。
答案 0 :(得分:0)
发出setData
信号是dataChanged
的工作,而不是您的!您显示的代码是正确的,可以很容易地证明它运行正常。请修改问题以包括复制案。有关此类测试用例的外观的启发,请参见例如this answer。简而言之:目标是100行或更少,单个文件,#include <QtWidgets>
开头,没有不必要的代码或样板。让它变得甜美而简单:)