PDA

View Full Version : Selecting new row in QTableView



naptizaN
19th July 2012, 14:42
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?


modelt = new QSqlTableModel(this);
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::SingleSelectio n);
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:

QSqlQuery *q = new QSqlQuery();
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)
{
QMessageBox *pmsg = new QMessageBox;
pmsg->setText("Can't connect");
pmsg->setInformativeText(q->lastError().text());
pmsg->exec();
}
delete q;

wysota
20th July 2012, 14:33
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).