2013-09-28 244 views
7

Có cách nào để lấy dữ liệu từ hàng đã chọn từ chế độ xem bảng không? Tôi đã sử dụng QModelIndexList ids = ui->tableView->selectionModel()->selectedRows(); trả về danh sách các chỉ mục của các hàng đã chọn. Tôi không cần chỉ mục. Tôi cần dữ liệu từ mọi ô của hàng đã chọn.Qt C++ Nhận dữ liệu từ mọi ô của hàng đã chọn từ QTableView

+0

Sử dụng 'QModelIndex :: dữ liệu (int vai trò)' làm sence? – vahancho

Trả lời

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

đang được sử dụng để trả lại dữ liệu. Nếu bạn cần phải nhận được dữ liệu bạn đang làm việc đó ở đây dựa trên QModelIndex hàng và cột và lấy nó từ một số container, có lẽ

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

Bạn phải xác định lập bản đồ đó và sử dụng nó trong data()setData() chức năng để xử lý tương tác với dữ liệu mô hình cơ bản.

Ngoài ra QAbstractItemModelQTreeView cung cấp cách để gán lớp học của bạn tức là TreeItem cho mỗi QModelIndex, vì vậy bạn tiếp theo có thể lấy một con trỏ đến từng dữ liệu sử dụng static_cast của con trỏ trở về từ QModelIndex.internalPointer() chức năng:

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

như vậy thì bạn có thể tạo ra một số bản đồ:

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

bạn có thể Hãy thử điều này

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