Qt C从QTableView中获取所选行的每个单元格中的数据

前端之家收集整理的这篇文章主要介绍了Qt C从QTableView中获取所选行的每个单元格中的数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法从表视图中的选定行中获取数据?我用过
QModelIndexList ids = ui-> tableView-> selectionModel() – > selectedRows();它返回所选行的索引列表.我不需要索引.我需要来自所选行的每个单元格的数据.

解决方法

QVariant data(const QModelIndex& index,int role) const

用于返回数据.如果您需要根据QModelIndex行和列在此处获取数据并从某个容器中检索它,也许

std::vector<std::vector<MyData> > data;

您必须定义此类映射并在data()和setData()函数中使用它来处理与底层模型数据的交互.

或者,QAbstractItemModel和QTreeView提供了将类(即TreeItem)分配给每个QModelIndex的方法,因此您可以使用从QModelIndex.internalPointer()函数返回的指针的static_cast来检索指向每个数据的指针:

TreeItem *item = static_cast<TreeItem*>(index.internalPointer());

那么你可以创建一些映射:

// sets the role data for the item at <index> to <value> and updates 
// affected TreeItems and ModuleInfo. returns true if successful
// otherwise returns false
bool ModuleEnablerDialogTreeModel::setData(const QModelIndex & index,const QVariant & value,int role) {
  if (role
      == Qt::CheckStateRole&& index.column()==ModuleEnablerDialog_CheckBoxColumn) {
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    Qt::CheckState checkedState;
    if (value == Qt::Checked) {
      checkedState = Qt::Checked;
    } else if (value == Qt::Unchecked) {
      checkedState = Qt::Unchecked;
    } else {
      checkedState = Qt::PartiallyChecked;
    }
    //set this item currentlyEnabled and check state
    if (item->hierarchy() == 1) { // the last level in the tree hierarchy
      item->mModuleInfo.currentlyEnabled = (
          checkedState == Qt::Checked ? true : false);
      item->setData(ModuleEnablerDialog_CheckBoxColumn,checkedState);
      if (mRoot_Systems != NULL) {
        updateModelItems(item);
      }
    } else { // every level other than last level
      if (checkedState == Qt::Checked || checkedState == Qt::Unchecked) {
        item->setData(index.column(),checkedState);
        // update children
        item->updateChildren(checkedState);
        // and parents
        updateParents(item);

example of implementation

原文链接:https://www.f2er.com/c/118244.html

猜你在找的C&C++相关文章