Я пытаюсь использовать выделение (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 );
После вызова выбор будет серым (и больше не синим), но все еще будет «выбран». Щелчок в любом месте обновляет дерево и правильно отображает отмеченные элементы.