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 {
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"]
SearchBar
{
id:searchBar
@@ -57,119 +57,48 @@ Item {
text: qsTr("Erledigt")
}
}
TableView {
HorizontalHeaderView
{
id: horizontalHeader
Layout.fillWidth: true
syncView: testTable
}
TableView
{
id: testTable
Layout.fillHeight: true
Layout.fillWidth: true
columnSpacing: 10
columnSpacing: 1
rowSpacing: 2
model: TableModel {
TableModelColumn { display: "checked" }
TableModelColumn { display: "amount" }
TableModelColumn { display: "fruitType" }
TableModelColumn { display: "fruitName" }
TableModelColumn { display: "fruitPrice" }
model: dbm
delegate:Item
{
implicitWidth: 200
implicitHeight: 25
rows: [
{
checked: "checked",
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
}
]
Text
{
Layout.fillWidth: true
text: model.display
}
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 {
Layout.fillHeight: true
@@ -179,3 +108,4 @@ Item {
}

View File

@@ -1,5 +1,6 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Item
@@ -15,10 +16,6 @@ Item
width: 300
Button
{
icon.source: "../images/search.svg"
@@ -31,13 +28,57 @@ Item
}
Button
{
id: filterBtn
icon.source: "../images/filter.svg"
icon.color: "olive"
anchors.left: searchField.right
height: searchField.height
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.QtQml import QQmlApplicationEngine
from lib.ConfigLoader import ConfigLoader
from lib.DataBase import DataBase
import sqlite3
# [pyqcrm]
# program-name=""
@@ -17,7 +18,18 @@ from lib.ConfigLoader import ConfigLoader
# password=""
# name=""
# 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()
con = testConnection()
dbm = DataBase(con)
if not config.getConfig():
bad_config = True
engine.rootContext().setContextProperty("dbm", dbm)
engine.rootContext().setContextProperty("bad_config", bad_config) # print(f"Fehler: {i}")
engine.rootContext().setContextProperty("config", config)
engine.load(qml_file)

View File

@@ -11,6 +11,7 @@
"gui/TopBar.qml",
"gui/CustomerTables.qml",
"gui/SearchBar.qml",
"gui/test.qml"
"gui/test.qml",
"lib/DataBase.py"
]
}