Selecting new row in QTableView
Hello again, I would like to select a row in the a QTableView after inserting it to database using QSqlQuery. . I can see the added row in QTableView but my problem is I cannot find QModelIndex which corresponds to the new row in the model. And i use QSortFilterProxyModel between the model and the view.
How can i find QModelIndex of the inserted row and select it in QTableView?
Code:
modelt
->setTable
("sianimtable");modelt
->setEditStrategy
(QSqlTableModel::OnRowChange);
modelt->setHeaderData(1, Qt::Horizontal, "Code");
modelt->setHeaderData(3, Qt::Horizontal, "Name);
modelt->select();
filterModel = new QSortFilterProxyModel;
filterModel->setSourceModel(modelt);
filterModel->setFilterKeyColumn(2);
QTableView* view = new QTableView;
view->setModel(filterModel);
view->resizeColumnsToContents();
view->horizontalHeader()->setStretchLastSection(true);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setEditTriggers(QAbstractItemView::NoEditTriggers);
view->hideColumn(0);
view->hideColumn(2);
view->hideColumn(4);
view->hideColumn(5);
view->hideColumn(6);
view->setSortingEnabled(true);
view->sortByColumn(1, Qt::AscendingOrder);
view->verticalHeader()->hide();
view->setAutoScroll(true);
Inserting with:
Code:
q->prepare("INSERT INTO sianimtable (CIPHER,CIPHERKP,TITLE,MSGON,MSGOFF) VALUES(:le2,:le1,:le3,:le4,:le5);");
q->bindValue(":le1",le1->text());
q->bindValue(":le2",le2->text());
q->bindValue(":le3",le3->text());
q->bindValue(":le4",le4->text());
q->bindValue(":le5",le5->text());
if(q->exec()==false)
{
pmsg->setText("Can't connect");
pmsg->setInformativeText(q->lastError().text());
pmsg->exec();
}
delete q;
Re: Selecting new row in QTableView
You need to ask the model for the index. It could be the last row in the table but it doesn't have to be. By the way, C++ is not Java, you don't need all those pointers everywhere (at least not with QMessageBox and QSqlQuery).