I've resolve the question adding a method that implements the code of the numbat's example:
{
// Our master can have any number of columns.
//Scorro il model principale per riga
for (int i=0; i< master->rowCount();i++){
//Leggo il record corrente del model
//Creo una lista di colonne
QList<QStandardItem*> colsFatt;
//Scorro tutte le colonne
for (int j=0; j<master->columnCount();++j){
//Aggiungo i dati delle colonne alla lista
}
//Aggiungo la lista dei dati delle colonne al model
parentItem->appendRow(colsFatt);
//Creo un elemento fittizio per aggiungere i dati di secondo livello
colsFatt.at(0)->appendRow(ph);
ph->setFlags(Qt::NoItemFlags);
slave
->setFilter
(QString("%1=%2").
arg(fieldslave
).
arg(rec.
value(fieldmaster
).
toInt()));
for (int k = 0; k < slave->rowCount(); k++)
{
QList<QStandardItem*> colsDett;
for (int x = 0; x < slave->columnCount(); ++x)
{
colsDett.
push_back(new QStandardItem(recDett.
value(x
).
toString()));
}
m2->invisibleRootItem()->appendRow(colsDett);
}
m
->setData
(ph
->index
(),
QVariant(QMetaType::type("QAbstractItemModel*"),
&m2
), ChildModelRole
);
}
this->setModel(m);
}
void HGrid::setMasterSlaveModel(QSqlTableModel *master, QSqlTableModel *slave, QString fieldmaster, QString fieldslave)
{
// Our master can have any number of columns.
QStandardItemModel * m = new QStandardItemModel();
QStandardItem *parentItem = m->invisibleRootItem();
//Scorro il model principale per riga
for (int i=0; i< master->rowCount();i++){
//Leggo il record corrente del model
QSqlRecord rec = master->record(i);
//Creo una lista di colonne
QList<QStandardItem*> colsFatt;
//Scorro tutte le colonne
for (int j=0; j<master->columnCount();++j){
//Aggiungo i dati delle colonne alla lista
colsFatt.push_back(new QStandardItem(rec.value(j).toString()));
}
//Aggiungo la lista dei dati delle colonne al model
parentItem->appendRow(colsFatt);
//Creo un elemento fittizio per aggiungere i dati di secondo livello
QStandardItem * ph = new QStandardItem( "Placeholder");
colsFatt.at(0)->appendRow(ph);
ph->setFlags(Qt::NoItemFlags);
QStandardItemModel * m2 = new QStandardItemModel;
slave->setFilter(QString("%1=%2").arg(fieldslave).arg(rec.value(fieldmaster).toInt()));
for (int k = 0; k < slave->rowCount(); k++)
{
QList<QStandardItem*> colsDett;
QSqlRecord recDett = slave->record(k);
for (int x = 0; x < slave->columnCount(); ++x)
{
colsDett.push_back(new QStandardItem(recDett.value(x).toString()));
}
m2->invisibleRootItem()->appendRow(colsDett);
}
m->setData(ph->index(), QVariant(QMetaType::type("QAbstractItemModel*"), &m2), ChildModelRole);
}
this->setModel(m);
}
To copy to clipboard, switch view to plain text mode
But I don't like it so much. Is there any smarter solution? Have you got any ideas?
Thanks a lot for your time.
Michele
Bookmarks