2013-09-28 30 views
7

是否有任何方法从表视图中的选定行获取数据?我用 QModelIndexList ids = ui->tableView->selectionModel()->selectedRows();它返回所选行的索引列表。我不需要索引。我需要来自所选行的每个单元格的数据。Qt C++从QTableView中获取选定行的每个单元的数据

+0

使用'QModelIndex ::数据(INT角色)'让SENCE? – vahancho

回答

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

正用于返回数据。如果你需要得到的数据,你在这里做基于QModelIndex行和列和一些容器取出它,也许

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

你必须定义这样的映射,并用它在data()setData()函数来处理与互动基础模型数据。

或者QAbstractItemModelQTreeView提供给你的类即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

7

你可以试试这个

int rowidx = ui->tblView->selectionModel()->currentIndex().row(); 
ui->txt1->setText(model->index(rowidx , 0).data().toString()); 
ui->txt2->setText(model->index(rowidx , 1).data().toString()); 
ui->txt3->setText(model->index(rowidx , 2).data().toString()); 
ui->txt4->setText(model->index(rowidx , 3).data().toString()); 
1
Try this for getting data. selectedRows(0) indicates first column of selected rows, selectedRows(1) indicates second column of selected rows row likewise 

QItemSelectionModel *select = ui->existingtable->selectionModel(); 
qDebug()<<select->selectedRows(0).value(0).data().toString(); 
qDebug()<<select->selectedRows(1).value(0).data().toString(); 
qDebug()<<select->selectedRows(2).value(0).data().toString(); 
qDebug()<<select->selectedRows(3).value(0).data().toString(); 
相关问题