Choosing columns for display in an QSqlTableModel
Solved
General and Desktop
-
Hi,
Why not just use a QSqlQueryModel and a QStyledItemDelegate ?
If you want to have specific names for the columns you are selecting then use the
SELECT myColumn AS NewName
construct. -
QStandardItemModel *smodel = new QStandardItemModel(this); // maybe give it a parent to avoid memory leaks for(int row1=0;query.next (); ++row1) { if(row1==0){ const QSqlRecord qRec=query.record(); smodel->insertColumns(0,qRec.count()); Q_ASSERT(query.size()>=0) // if NO COUNT is set in the database then you have to calculate the size manually smodel->inserRows(0,query.size()); // Optional: set headers for(int i=0;i<qRec.count();++i) smodel->setHeaderData(i,Qt::Horizontal,qRec.fieldName(i)); } smodel->setData (smodel->index(row1,0), NameD = query.value(0).toString ()); qDebug() << "row1: " << row1; qDebug() << "NameD: " << NameD; Pixmap.loadFromData (query.value (1).toByteArray ()); smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole ); smodel->setData (smodel->index(row1,2), DescrD = query.value (2).toString ()); qDebug() << "DescrD: " << DescrD; }
-
Looks like rows are still mot inserted, try this:
for(int row1=0;query.next (); ++row1) { if(row1==0){ const QSqlRecord qRec=query.record(); smodel->insertColumns(0,qRec.count()); // Optional: set headers for(int i=0;i<qRec.count();++i) smodel->setHeaderData(i,Qt::Horizontal,qRec.fieldName(i)); } smodel->inserRow(row1); smodel->setData (smodel->index(row1,0), query.value(0).toString ()); Pixmap.loadFromData (query.value (1).toByteArray ()); smodel->setData (smodel->index(row1,1),Pixmap,Qt::DecorationRole ); smodel->setData (smodel->index(row1,2), query.value (2).toString ()); }
-
Check your query and your database content.