ubuntuusers.de

qml: TableView mit settings speichern

Status: Ungelöst | Ubuntu-Version: Ubuntu MATE 16.10 (Yakkety Yak)
Antworten |

dl8aax

Avatar von dl8aax

Anmeldungsdatum:
6. Mai 2016

Beiträge: 107

Wohnort: bei Göttingen

Hi,

Ich habe ein kleines Programm mit einem TableView.

Wie kann ich mit Setting die Daten vom TableView Speichern ?

Geht das direkt oder muss ich erst alles in eine Variable screiben und diese dan mit Settings speichern ?

Flotte Grüße

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Am "einfachsten" ist es, wenn du dir ein QAbstractModel in C++ anlegst und dieses als Datenmodell verwendest. Das kannst du dann entweder mittels QSettings speichern - oder noch besser - als SQLite-Datenbank über QSqlDatabase.

Alternativ kannst du natürlich auch durchs model loopen und alles einzeln speichern, wobei mir das zu aufwändig wäre, da man bei einem editierbaren model dynamisch auf die columns und rows reagieren muss. Bei einem Update des Qt-Frameworks muss das dann auch nicht mehr exakt gleich funktionieren.

dl8aax

(Themenstarter)
Avatar von dl8aax

Anmeldungsdatum:
6. Mai 2016

Beiträge: 107

Wohnort: bei Göttingen

Hi,

danke für die Antwort. QAbstractModel in C++ hört sich für mich als Anfänger mit C++ hoch kompliziert an. Habe bislang nur mit GAMBAS Programmiert, da ist alles einfacher.

Flotte Grüße

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Daher das einfach in Anführungszeichen. Habe da die Tage auch mit gekämpft.

Fangen wir anders an: Was bezweckt deine Tabelle? Hat diese ein festes Format? Brauchst du viel dynamisches?

dl8aax

(Themenstarter)
Avatar von dl8aax

Anmeldungsdatum:
6. Mai 2016

Beiträge: 107

Wohnort: bei Göttingen

Hi,

Die Tabelle hat 3 Spalten prio,te, erledigt Die Spalte erledigt wird bei Doppelklick geändert ja oder nein. beim nächsten Start werden die neins nicht mit eingelesen. Ich häng das mal alles mit drann.

  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
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
import QtQuick 2.4
import Tomorrow 1.0
import Ubuntu.Components 1.3
import QtQuick.Controls 1.4
import QtQuick.Window 2.2
import QtQuick.Controls.Styles 1.4
import Qt.labs.settings 1.0
import QtQuick.Dialogs 1.1
//import QtLocation 5.3

/*!
    \brief MainView with a Label and Button elements.
*/

MainView {
    // objectName for functional testing purposes (autopilot-qt5)
    objectName: "mainView"

    // Note! applicationName needs to match the "name" field of the click manifest
    applicationName: "tomorrow.dl8aax"

    width: units.gu(50)
    height: units.gu(75)
property string comboausw: ""
    Page {
        header: PageHeader {
                            id: pageHeader
                            title: i18n.tr("To do Tomorrow ")
                            StyleHints {
                                //foregroundColor: UbuntuColors.orange
                                // backgroundColor: UbuntuColors.porcelain
                                // dividerColor: UbuntuColors.slate
                            }
                           }


        Settings {
                id: settings
                property color color: '#000000'
            }
        Rectangle {
            id: rectangle1
            x: 1
            y: 70
            width: pageHeader.width/2
            height: 22
            anchors.top: pageHeader.bottom
            anchors.topMargin: 4
            color: "#ffffff"
            radius: 2
            border.color: "#f40606"
            border.width: 2
                               TextInput {
                                   id: textInput1
                                   x: 0
                                   y: 0
                                   width: rectangle1.width
                                   clip: true
                                   height: 20
                                   text: qsTr("Text eingeben")
                                   font.pixelSize: 12
                                         }
                           }
        Text {
                    id: text1
                    x: 0
                    y: 21
                    width: 47
                    height: 13
                    text: qsTr("Aufgabe")
                    styleColor: "#f33535"
                    anchors.left: rectangle1.left
                    anchors.leftMargin: 2
                    anchors.top: rectangle1.bottom
                    anchors.topMargin: 4
                    font.pointSize: FontUtils.sizeToPixels("x-small")
                }



        Rectangle {
                    id: rectangle9
                           x: 170
                           y: 40
                           z: 1
                           width: pageHeader.width/2.5 //80
                           height: 22
                           anchors.left: rectangle1.right
                           anchors.leftMargin: 4
                           anchors.top: pageHeader.bottom
                           anchors.topMargin: 4
                           color: "#fecece"
                           radius: 2
                           border.color: "#f40606"
                           border.width: 2
                           ComboBox {
                                     id: modes
                                     width: rectangle9.width-6
                                     anchors.verticalCenter: rectangle9.verticalCenter
                                     anchors.leftMargin: 3
                                     height: 16
                                     anchors.top: parent.top
                                     anchors.topMargin: 2
                                     anchors.left: parent.left
                                     currentIndex: 0
                                     model: ListModel {
                                                       id: cbItems
                                                       ListElement { text: " ";  adr: " " }
                                                       ListElement { text: "Sehr wichtig";  adr: "Sehr wichtig" }
                                                       ListElement { text: "wichtig";    adr: "wichtig"   }
                                                       ListElement { text: "nicht so wichtig";  adr: "nicht so wichtig" }
                                                       ListElement { text: "";    adr: " "   }
                                                       ListElement { text: "";    adr: " "   }
                                                      }

                                     onCurrentIndexChanged:{
                                                            comboausw = cbItems.get(currentIndex).text

                                                            //console.log(comboausw   )
                                                            //comboausw ="test"
                                                            //console.log( cbItems.get(currentIndex).text)
                                                           }
                                     }//ComboBox

                }
                Text {
                    id: text9
                    x: 170
                    y: 60
                    width: 47
                    height: 13
                    text: qsTr("Priorität")
                    styleColor: "#f33535"
                    anchors.left: rectangle9.left
                    anchors.leftMargin: 2
                    anchors.top: rectangle9.bottom
                    anchors.topMargin: 4
                    font.pointSize: FontUtils.sizeToPixels("x-small")
                }

                Button {
                            id: button1
                            y: 60
                            width: pageHeader.width/7 //44
                            height: 27
                            text: "Save"
                            objectName: "button"
                            anchors.top: rectangle1.bottom
                            anchors.topMargin: 4
                            anchors.right: pageHeader.right
                            anchors.rightMargin: 4
                            onClicked: {
                                        //console.log("edit= "  )
                                        libraryModel.append({
                                                              "te":textInput1.text,
                                                              "prio": comboausw,
                                                              "erledigt": "nein"
                                                            })

                                        textInput1.text=""
                                        modes.currentIndex= 0


                                       }//onClicked
                        }//button1

                ListModel {
                            id: libraryModel

                        }
                        TableView {
                                    id:tbview
                                    x: 8
                                    y: 98
                                    width: 384
                                    height: 388
                                    anchors.right: pageHeader.right
                                    anchors.rightMargin: 4
                                    sortIndicatorVisible: true
                                    anchors.left: pageHeader.left
                                    anchors.leftMargin: 4
                                    //anchors.bottom: button2.top
                                    anchors.bottomMargin: 4
                                    anchors.top: button1.bottom
                                    anchors.topMargin: 4
                                    highlightOnFocus: true

                                    TableViewColumn { role: "prio"; title: "Priorität"; width: tbview.width/ 3 }
                                    TableViewColumn { role: "te";  title: "Aufgabe";  width: tbview.width/2 }
                                    TableViewColumn { role: "erledigt";  title: "Erledigt";  width: tbview.width/3.5 }
                                    model: libraryModel
                                    onClicked: {
                                                  // console.log(user.name   )
                                                   console.log( supplier.name )
                                                 }
                                    onDoubleClicked: {

                                                        if(libraryModel.get(tbview.currentRow).erledigt == "nein")
                                                                {
                                                                 libraryModel.set(tbview.currentRow, {"erledigt":"ja",})

                                                                }
                                                        else {libraryModel.set(tbview.currentRow, {"erledigt":"nein"})}
                                                     }

                                  }//TableView
    }//page
}//mainview




Flotte Grüße

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Ich habe gerade nochmal per Suchmaschine geforscht, aber es gibt anscheinend keine Möglichkeit per QML/JS Dateien zu schreiben, so dass du nicht um C++ (oder evtl. Python) herum kommen wirst.

Dort hast du dann zwei Möglichkeiten: Das nutzen der oben erwähnten Datenbank mit dem QAbstractModel, oder - was in deinem Fall ausreichend sein sollte - einen simplen Weg um in eine Datei schreiben zu können, wie z.B. unter qml-simplest-way-to-write-to-a-text-file beschrieben.

Zum Auslesen der einzelnen Inhalte kannst du ja bei QML bleiben.

dl8aax

(Themenstarter)
Avatar von dl8aax

Anmeldungsdatum:
6. Mai 2016

Beiträge: 107

Wohnort: bei Göttingen

Hallo,

ich habe mal versucht die Dateien von "qml-simplest-way-to-write-to-a-text-file " in mein Projekt zu integrieren.

leider bekomme ich eine Fehlermeldung.

Bilder

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Ist recht eindeutig. Dir fehlt die eine #include-Datei. Diese wird ja vom QtCreator unterstrichen und kann nicht gefunden werden.

dl8aax

(Themenstarter)
Avatar von dl8aax

Anmeldungsdatum:
6. Mai 2016

Beiträge: 107

Wohnort: bei Göttingen

ChickenLipsRfun2eat schrieb:

Ist recht eindeutig. Dir fehlt die eine #include-Datei. Diese wird ja vom QtCreator unterstrichen und kann nicht gefunden werden.

Ja ist mir schon klar aber was muss in der Datei drin stehen ?

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Verstehst du den code?

Da wird ja ein QtQuick2ApplicationViewer viewer; initialisiert. Dieser ist bei Qt dabei, muss aber über die entsprechende Header-Datei erst eingebunden werden oder - falls an anderer Stelle eingebunden wird - vordefiniert werden.

Ich empfehle dir zunächst ein Grundlagen-Tutorial für c++ zu machen, damit du dich da zurecht findest. Immerhin möchtest du schreibend auf Dateien zugreifen und da kann man auch viel Mist mit machen ☺

Antworten |