以编程方式检查QAbstractItemModel / QTreeView中的项目

问题描述 投票:0回答:1

我正在尝试使用选择(QModelIndexList)来检查QTreeView的所有选定项目。

我在索引上使用setDataQt::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 );

通话结束后,选择为灰色(不再是蓝色),但仍然“选中”。单击任意位置刷新树并正确显示选中的项目。

qt model qtreeview qabstractitemmodel
1个回答
0
投票

发出setData信号是dataChanged的工作,而不是你的!您显示的代码是正确的,可以很容易地显示它工作正常。请修改问题以包括复制案例。有关这种测试用例的外观的灵感,请参阅例如this answer。简而言之:目标是100行或更少,单个文件,开头的#include <QtWidgets>,没有不必要的代码或样板。让它甜美简单:)

© www.soinside.com 2019 - 2024. All rights reserved.