2013-09-28 14 views

Odpowiedz

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

jest używany do zwracania danych. Jeśli potrzebujesz, aby uzyskać dane robisz to tutaj na podstawie QModelIndex wiersza i kolumny i pobierania go z jakiegoś pojemnika, może

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

Trzeba zdefiniować takie mapowanie i używać go w data() i setData() funkcji do obsługi interakcji z bazowe dane modelu.

Alternatywnie QAbstractItemModel i QTreeView oferuje sposób przypisywania swojej klasy IE TreeItem każdemu QModelIndex, więc można pobierać następny wskaźnik do danych każdego z wykorzystaniem static_cast wskaźnik wrócił z QModelIndex.internalPointer() funkcji:

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

więc wtedy można stworzyć pewne odwzorowanie:

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

możesz spróbować tej

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(); 
Powiązane problemy