datenbankmodel

This commit is contained in:
2024-11-07 15:12:53 +01:00
parent bbad3b5fcb
commit 24a5255bac
5 changed files with 139 additions and 108 deletions

View File

@@ -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" }
TableModelColumn { display: "fruitName" }
TableModelColumn { display: "fruitPrice" }
rows: [
{ {
checked: "checked", implicitWidth: 200
amount: "amount", implicitHeight: 25
fruitType: "Fruittype",
fruitName: "fruitName", Text
fruitPrice: "Price"
},
{ {
checked: true, Layout.fillWidth: true
amount: 2, text: model.display
fruitType: "Fruittype",
fruitName: "blabla",
fruitPrice: 1.50
},
}
MouseArea
{ {
anchors.fill: parent
checked: true, onClicked: dbm.onRowClicked(row)
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
} }
] }
} }
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 {
} }

View File

@@ -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
View 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
View File

@@ -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)

View 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"
] ]
} }