I have a QTabWidget, each tab contains a QTableView. The tableviews use QTableModels which reads data from an sqlite database.
The models are kept as member variables, so I don't think it's a scope problem (which is the most frequent problem I've found by searching for the issue).
Other db operations works: I tried populating / creating tables in the code, and those operation are correctly executed.
This is how I initialized the models and the views:
void AlisnagMainWindow::initModels(){
people_model->setTable("people");
people_model->setEditStrategy(QSqlTableModel::OnRowChange);
people_model->select();
people_model->setHeaderData(0, Qt::Horizontal, tr("Name"));
people_model->setHeaderData(1, Qt::Horizontal, tr("Surname"));
people_model->setHeaderData(2, Qt::Horizontal, tr("Phone"));
people_model->setHeaderData(3, Qt::Horizontal, tr("Address"));
items_model->setTable("items");
items_model->setEditStrategy(QSqlTableModel::OnRowChange);
items_model->setRelation(3, QSqlRelation("categories","id","name"));
items_model->select();
loans_model->setTable("loans");
loans_model->setEditStrategy(QSqlTableModel::OnRowChange);
loans_model->setRelation(0, QSqlRelation("items","id","name"));
loans_model->setRelation(1, QSqlRelation("people","id","name"));
loans_model->select();
ui->peopleView->setModel(people_model);
ui->peopleView->hideColumn(0);
ui->itemsView->setModel(items_model);
ui->itemsView->hideColumn(0);
ui->loansView->setModel(loans_model);
ui->loansView->hideColumn(0);
}
The database is loaded as follows:
bool AlisnagMainWindow::loadDB(const QString &filename)
{
if(db.isOpen())
db.close();
db.setDatabaseName(filename);
if( !db.open() ){
QMessageBox::critical(this, tr("Error"),
tr("Could not open db %1").arg(filename),
QMessageBox::Ok);
return false;
}
ui->statusBar->showMessage("DB successfully opened!");
return true;
}
Then this is how is all combined:
void AlisnagMainWindow::openFile()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Choose DB file"),
".", "*.db");
loadDB(filename);
initModels();
}
The file I'm opening has been populated externally. When I run the code, neither the data nor the headers are shown. Any insight?
Thanks in advance.
Aucun commentaire:
Enregistrer un commentaire