Relational database plugin for QML

This plugin allows you to access relational database in QML.

import QtQuick 2.0
import me.qtquick.Database 0.1

Item {
    id: root
    width: 400
    height: 300

    Database {
        id: db
        connectionName: 'test'
        type: "QSQLITE"
        databaseName: ":memory:"

        TableModel {
            id: table
            tableName: 'Test'
            primaryKey: 'key'
            property int key
            property string value
        }

        SqlModel {
            id: select
            query: "SELECT COUNT(key) as keys FROM Test WHERE value LIKE ?"
            params: ['%Qt%']
        }
    }

    Rectangle {
        id: header
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.margins: 2
        height: field.font.pixelSize * 1.5

        border.color: 'gray'
        border.width: 1

        TextInput {
            id: field
            anchors.fill: parent
            anchors.margins: 2
            focus: true


            Keys.onReturnPressed: {
                select.select = false
                table.insert({'value': field.text})
                field.text = ''
                select.select = true
            }
        }
    }

    Flickable {
        anchors.top: header.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: footer.top
        contentWidth: width
        contentHeight: contents.height
        Grid {
            id: contents
            width: parent.width
            flow: Grid.TopToBottom
            rows: table.count + 1
            Text {
                width: 100
                text: 'key'
            }

            Repeater {
                model: table
                Text {
                    text: model.key
                }
            }
            Text {
                text: 'value'
            }

            Repeater {
                model: table
                Text {
                    text: model.value
                    MouseArea {
                        anchors.fill: parent
                        onClicked: {
                            select.select = false
                            table.remove({'key': model.key})
                            select.select = true
                        }
                    }
                }
            }
        }
    }
    Text {
        id: footer
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        text: 'the number of values that contains "Qt" is %1.'.arg(select.count > 0 ? select.get(0).keys : '0')
    }

}
$ git clone git://git.qt-users.jp/codereview/qmlplugins/database.git
$ cd database
$ qmake
$ make
$ (sudo) make install
$ qmlscene ./examples/examples.qml

contributions are always welcome!
see http://qtquick.me/ for details

あわせて読みたい