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
7
A
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()
và 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 QAbstractItemModel
và QTreeView
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);
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();
Sử dụng 'QModelIndex :: dữ liệu (int vai trò)' làm sence? – vahancho