1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#!/usr/bin/perl
use strict;
use warnings;
use QtCore4;
use QtGui4;
use lib '../';
use Connection;
sub initializeModel
{
# [0]
my ($model) = @_;
$model->setTable('employee');
# [0]
$model->setEditStrategy(Qt::SqlTableModel::OnManualSubmit());
# [1]
$model->setRelation(2, Qt::SqlRelation('city', 'id', 'name'));
# [1] //! [2]
$model->setRelation(3, Qt::SqlRelation('country', 'id', 'name'));
# [2]
# [3]
$model->setHeaderData(0, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('ID'))));
$model->setHeaderData(1, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('Name'))));
$model->setHeaderData(2, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('City'))));
$model->setHeaderData(3, Qt::Horizontal(), Qt::Variant(Qt::String(Qt::Object::tr('Country'))));
# [3]
$model->select();
}
sub createView
{
# [4]
my ($title, $model) = @_;
my $view = Qt::TableView();
$view->setModel($model);
$view->setItemDelegate(Qt::SqlRelationalDelegate($view));
# [4]
$view->setWindowTitle($title);
return $view;
}
sub createRelationalTables
{
my $query = Qt::SqlQuery();
$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))');
$query->exec('insert into city values(100, \'San Jose\')');
$query->exec('insert into city values(5000, \'Oslo\')');
$query->exec('insert into city values(80000, \'Munich\')');
$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\')');
}
sub main
{
my $app = Qt::Application(\@ARGV);
if (!Connection::createConnection()) {
return 1;
}
createRelationalTables();
my $model = Qt::SqlRelationalTableModel();
initializeModel($model);
my $view = createView(Qt::Object::tr('Relational Table Model'), $model);
$view->show();
return $app->exec();
}
exit main();
|