File: relationaltablemodel.pl

package info (click to toggle)
qt4-perl 4.8.4-1.2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,636 kB
  • ctags: 8,100
  • sloc: perl: 42,963; cpp: 28,039; makefile: 160; xml: 98; sh: 4
file content (84 lines) | stat: -rw-r--r-- 2,349 bytes parent folder | download | duplicates (4)
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();