datenbankmodel
This commit is contained in:
@@ -7,7 +7,7 @@ import Qt.labs.qmlmodels
|
|||||||
Item {
|
Item {
|
||||||
|
|
||||||
|
|
||||||
|
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"]
|
||||||
SearchBar
|
SearchBar
|
||||||
{
|
{
|
||||||
id:searchBar
|
id:searchBar
|
||||||
@@ -57,119 +57,48 @@ Item {
|
|||||||
|
|
||||||
text: qsTr("Erledigt")
|
text: qsTr("Erledigt")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
TableView {
|
HorizontalHeaderView
|
||||||
|
{
|
||||||
|
id: horizontalHeader
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
syncView: testTable
|
||||||
|
|
||||||
|
}
|
||||||
|
TableView
|
||||||
|
{
|
||||||
id: testTable
|
id: testTable
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
columnSpacing: 10
|
|
||||||
|
columnSpacing: 1
|
||||||
rowSpacing: 2
|
rowSpacing: 2
|
||||||
|
|
||||||
|
|
||||||
model: TableModel {
|
model: dbm
|
||||||
TableModelColumn { display: "checked" }
|
delegate:Item
|
||||||
TableModelColumn { display: "amount" }
|
{
|
||||||
TableModelColumn { display: "fruitType" }
|
implicitWidth: 200
|
||||||
TableModelColumn { display: "fruitName" }
|
implicitHeight: 25
|
||||||
TableModelColumn { display: "fruitPrice" }
|
|
||||||
|
|
||||||
|
Text
|
||||||
rows: [
|
{
|
||||||
{
|
Layout.fillWidth: true
|
||||||
checked: "checked",
|
text: model.display
|
||||||
amount: "amount",
|
|
||||||
fruitType: "Fruittype",
|
|
||||||
fruitName: "fruitName",
|
|
||||||
fruitPrice: "Price"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
checked: true,
|
|
||||||
amount: 2,
|
|
||||||
fruitType: "Fruittype",
|
|
||||||
fruitName: "blabla",
|
|
||||||
fruitPrice: 1.50
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
checked: true,
|
|
||||||
amount: 1,
|
|
||||||
fruitType: "Apple",
|
|
||||||
fruitName: "Granny Smith",
|
|
||||||
fruitPrice: 1.50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
checked: "true",
|
|
||||||
amount: 4,
|
|
||||||
fruitType: "Orange",
|
|
||||||
fruitName: "Navel",
|
|
||||||
fruitPrice: 2.50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
checked: "false",
|
|
||||||
amount: 1,
|
|
||||||
fruitType: "Banana",
|
|
||||||
fruitName: "Cavendish",
|
|
||||||
fruitPrice: 3.50
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: dbm.onRowClicked(row)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delegate: DelegateChooser {
|
|
||||||
|
|
||||||
DelegateChoice {
|
}
|
||||||
column: 0
|
|
||||||
delegate: Text {
|
|
||||||
|
|
||||||
text: model.display
|
|
||||||
//selectByMouse: true
|
|
||||||
//implicitWidth: 140
|
|
||||||
//onVisibleChanged: model.display = "checked"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DelegateChoice {
|
|
||||||
column: 1
|
|
||||||
delegate: Text {
|
|
||||||
|
|
||||||
text: model.display
|
|
||||||
//selectByMouse: true
|
|
||||||
//implicitWidth: 140
|
|
||||||
//onVisibleChanged: model.display = "amount"
|
|
||||||
//onLinkHovered: model.display = checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DelegateChoice {
|
|
||||||
column: 2
|
|
||||||
delegate: Text {
|
|
||||||
|
|
||||||
text: model.display
|
|
||||||
//selectByMouse: true
|
|
||||||
//implicitWidth: 140
|
|
||||||
//model.display : "fruitType"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DelegateChoice {
|
|
||||||
column: 3
|
|
||||||
delegate: Text {
|
|
||||||
|
|
||||||
text: model.display
|
|
||||||
//selectByMouse: true
|
|
||||||
//implicitWidth: 140
|
|
||||||
//onVisibleChanged: model.display = "fruitName"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DelegateChoice {
|
|
||||||
column: 4
|
|
||||||
delegate: Text {
|
|
||||||
|
|
||||||
text: model.display
|
|
||||||
//selectByMouse: true
|
|
||||||
//implicitWidth: 140
|
|
||||||
//onVisibleChanged: model.display = "fruitPrice"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} }
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
@@ -179,3 +108,4 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
|
||||||
Item
|
Item
|
||||||
@@ -15,10 +16,6 @@ Item
|
|||||||
width: 300
|
width: 300
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
icon.source: "../images/search.svg"
|
icon.source: "../images/search.svg"
|
||||||
@@ -31,13 +28,57 @@ Item
|
|||||||
}
|
}
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
|
id: filterBtn
|
||||||
icon.source: "../images/filter.svg"
|
icon.source: "../images/filter.svg"
|
||||||
icon.color: "olive"
|
icon.color: "olive"
|
||||||
anchors.left: searchField.right
|
anchors.left: searchField.right
|
||||||
height: searchField.height
|
height: searchField.height
|
||||||
flat: true
|
flat: true
|
||||||
|
onClicked: filterPopup.open()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
Popup
|
||||||
|
{
|
||||||
|
id: filterPopup
|
||||||
|
x: filterBtn.x + filterBtn.width
|
||||||
|
y: filterBtn.y
|
||||||
|
width: 100
|
||||||
|
height: 150
|
||||||
|
modal: true
|
||||||
|
focus: true
|
||||||
|
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
|
||||||
|
contentItem: Item
|
||||||
|
{
|
||||||
|
|
||||||
|
ColumnLayout
|
||||||
|
{
|
||||||
|
anchors.fill: parent
|
||||||
|
//id: filterContent
|
||||||
|
|
||||||
|
Repeater
|
||||||
|
{
|
||||||
|
model: availableFilters
|
||||||
|
CheckBox
|
||||||
|
{
|
||||||
|
text: model.modelData
|
||||||
|
onClicked:
|
||||||
|
{
|
||||||
|
setFilter(text, checkState)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function setFilter(filter,activated)
|
||||||
|
{
|
||||||
|
console.log(filter)
|
||||||
|
console.log(activated)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
44
lib/DataBase.py
Normal file
44
lib/DataBase.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# This Python file uses the following encoding: utf-8
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import sqlite3
|
||||||
|
from PySide6.QtCore import QAbstractTableModel, QModelIndex, Qt, Slot
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class DataBase(QAbstractTableModel):
|
||||||
|
|
||||||
|
def __init__(self, con):
|
||||||
|
super().__init__()
|
||||||
|
self.con = con
|
||||||
|
self.__data = self.__getData()
|
||||||
|
|
||||||
|
def __getData(self):
|
||||||
|
cursor = self.con.cursor()
|
||||||
|
cursor.execute("SELECT * FROM test")
|
||||||
|
return cursor.fetchall()
|
||||||
|
|
||||||
|
def rowCount(self, parent= QModelIndex()):
|
||||||
|
return len (self.__data)
|
||||||
|
|
||||||
|
def columnCount(self, parent= QModelIndex()):
|
||||||
|
return 3
|
||||||
|
|
||||||
|
def data(self, index, role= Qt.DisplayRole):
|
||||||
|
if role == Qt.DisplayRole:
|
||||||
|
row, col = index.row(), index.column()
|
||||||
|
return self.__data[row][col]
|
||||||
|
return None
|
||||||
|
|
||||||
|
def headerData(self, section, orientation, role= Qt.DisplayRole):
|
||||||
|
header= ["ID", "Kundenname", "Ort"]
|
||||||
|
if orientation == Qt.Horizontal and role ==Qt.DisplayRole:
|
||||||
|
return header[section]
|
||||||
|
return super().headerData(section, orientation, role)
|
||||||
|
#return None
|
||||||
|
|
||||||
|
@Slot(int)
|
||||||
|
def onRowClicked(self, row):
|
||||||
|
print(row)
|
||||||
|
|
||||||
19
main.py
19
main.py
@@ -4,7 +4,8 @@ from pathlib import Path
|
|||||||
from PySide6.QtGui import QGuiApplication
|
from PySide6.QtGui import QGuiApplication
|
||||||
from PySide6.QtQml import QQmlApplicationEngine
|
from PySide6.QtQml import QQmlApplicationEngine
|
||||||
from lib.ConfigLoader import ConfigLoader
|
from lib.ConfigLoader import ConfigLoader
|
||||||
|
from lib.DataBase import DataBase
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
# [pyqcrm]
|
# [pyqcrm]
|
||||||
# program-name=""
|
# program-name=""
|
||||||
@@ -17,7 +18,18 @@ from lib.ConfigLoader import ConfigLoader
|
|||||||
# password=""
|
# password=""
|
||||||
# name=""
|
# name=""
|
||||||
# type=""
|
# type=""
|
||||||
|
def testConnection():
|
||||||
|
connection= sqlite3.connect(":memory:")
|
||||||
|
cur= connection.cursor()
|
||||||
|
cur.execute("CREATE TABLE test(id INTEGER primary key, Kundenname TEXT, Ort TEXT)")
|
||||||
|
cur.execute("""
|
||||||
|
INSERT INTO test VALUES
|
||||||
|
(1, 'Gruva', 'Dusseldorf'),
|
||||||
|
(2, 'Teroteroterotero', 'Krefeld'),
|
||||||
|
(3, 'Blabla','Paris')
|
||||||
|
""")
|
||||||
|
connection.commit()
|
||||||
|
return connection
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -32,10 +44,13 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
config = ConfigLoader()
|
config = ConfigLoader()
|
||||||
|
|
||||||
|
con = testConnection()
|
||||||
|
dbm = DataBase(con)
|
||||||
|
|
||||||
if not config.getConfig():
|
if not config.getConfig():
|
||||||
bad_config = True
|
bad_config = True
|
||||||
|
|
||||||
|
engine.rootContext().setContextProperty("dbm", dbm)
|
||||||
engine.rootContext().setContextProperty("bad_config", bad_config) # print(f"Fehler: {i}")
|
engine.rootContext().setContextProperty("bad_config", bad_config) # print(f"Fehler: {i}")
|
||||||
engine.rootContext().setContextProperty("config", config)
|
engine.rootContext().setContextProperty("config", config)
|
||||||
engine.load(qml_file)
|
engine.load(qml_file)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"gui/TopBar.qml",
|
"gui/TopBar.qml",
|
||||||
"gui/CustomerTables.qml",
|
"gui/CustomerTables.qml",
|
||||||
"gui/SearchBar.qml",
|
"gui/SearchBar.qml",
|
||||||
"gui/test.qml"
|
"gui/test.qml",
|
||||||
|
"lib/DataBase.py"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user