2013-09-28 15 views
7

Gibt es eine Möglichkeit, Daten aus einer ausgewählten Zeile aus einer Tabellenansicht abzurufen? Ich habe QModelIndexList ids = ui->tableView->selectionModel()->selectedRows(); verwendet, die eine Liste der Indizes der ausgewählten Zeilen zurückgibt. Ich brauche den Index nicht. Ich brauche die Daten von jeder Zelle der ausgewählten Zeile.Qt C++ Daten aus jeder Zelle einer ausgewählten Zeile aus einer QTableView abrufen

+0

Mit 'QModelIndex Versuchen :: data (int Rolle)' macht Sinn? – vahancho

Antwort

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

wird für die Rückgabe von Daten verwendet. Wenn Sie benötigen, um Daten bekommen Sie es hier basierend tun auf QModelIndex Zeile und Spalte und Abrufen es von einem Behälter, vielleicht

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

Sie müssen eine solche Zuordnung definieren und in data() und setData() Funktionen verwenden, um Interaktion Griff mit zugrunde liegende Modelldaten.

Alternativ QAbstractItemModel und QTreeView bietet die Möglichkeit, Ihre Klasse dh zuweisen TreeItem zu jedem QModelIndex, so dass Sie als nächstes einen Zeiger auf jeden Datensatz mit static_cast der Zeiger zurück von QModelIndex.internalPointer() Funktion abrufen können:

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

so ist, dann können Sie einige Mapping erstellen:

// 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

können Sie diese

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(); 
Verwandte Themen