PDA

View Full Version : how to add sub table to QSqlRelationalTableModel



SunnySan
29th July 2008, 16:04
Hi All,

I would like to add a column on my display table to show the population of the city (see code)
I modified the QT example and added the item "population" to the city table.

Does anybody knows how to add this column to the tableview (model)
is there a setRelation to add an extra column??

Thanks
SunnySan


#include <QtGui>
#include <QtSql>
#include <QApplication>


bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("127.0.0.1");//for localhost loop
db.setDatabaseName("local_DB"); //if the dababase does not exist he will create it
//the database name is also the name of the file in the working directory

if (!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
}

void initializeModel(QSqlRelationalTableModel *model)
{
model->setTable("employee");

model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setRelation(2, QSqlRelation("city", "id", "name"));
model->setRelation(3, QSqlRelation("country", "id", "name"));

model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("City"));
//Pb
model->setHeaderData(3, Qt::Horizontal, QObject::tr("Population Of City")); //PROBLEM Here
model->setHeaderData(4, Qt::Horizontal, QObject::tr("Country"));

model->select();
}

QTableView *createView(const QString &title, QSqlTableModel *model)
{
QTableView *view = new QTableView;
view->setModel(model);
view->setItemDelegate(new QSqlRelationalDelegate(view));
view->setWindowTitle(title);
return view;
}

void createRelationalTables()
{
QSqlQuery query;
query.exec("create table employee(id int primary key, name varchar(20), city int, country int)");
query.exec("insert into employee values(1, 'Espen', 5000, 47)");
query.exec("insert into employee values(2, 'Harald', 80000, 49)");
query.exec("insert into employee values(3, 'Sam', 100, 1)");

query.exec("create table city(id int, name varchar(20),population varchar(20))");
query.exec("insert into city values(100, 'San Jose','200,000')");
query.exec("insert into city values(5000, 'Oslo','200,020')");
query.exec("insert into city values(80000, 'Munich','200,110')");

query.exec("create table country(id int, name varchar(20))");
query.exec("insert into country values(1, 'USA')");
query.exec("insert into country values(47, 'Norway')");
query.exec("insert into country values(49, 'Germany')");
}

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (!createConnection())
return 1;
createRelationalTables();

QSqlRelationalTableModel model;

initializeModel(&model);

QTableView *view = createView(QObject::tr("Relational Table Model"), &model);
view->show();

return app.exec();
}

SunnySan
30th July 2008, 12:05
I guess the QSqlRelationalTableModel is only valid for simple tables.

I will have to use the query select to combime and display several table (with child table having more than one item) together.

If anybody find some good examples let me know

thanks
Sunnysan