Я пытаюсь использовать выборку (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();
. - person scopchanov   schedule 30.08.2018myTree->update(index)
с измененным индексом. - person Denis Rouzaud   schedule 30.08.2018myTree->viewPort()->update()
без особого успеха - person Denis Rouzaud   schedule 30.08.2018myTree->repaint()
решил проблему, но я не уверен, что это правильный подход. - person Denis Rouzaud   schedule 30.08.2018update
не работает, следует использоватьrepaint
, как вы уже делали. - person scopchanov   schedule 30.08.2018