Filterfunktion mittels QSortFilterProxyModel in ein QTableWidget

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mein lieber Scholli..


self.moviesTable.model().setModel(self.proxy_model)

Das ist die Zeile.

self.moviesTable ist der View. Der soll das Proxy Model bekommen. Dafür soll seine setModel-Methode aufgerufen werden.

Aber aus irgendeinem Grund hast du noch ein .model() reingepackt, das vom View das Model holt, und DANN willst du auf dem Model das Proxy Model setzen. Was Quatsch ist und darum natürlich auch nicht geht.

Und um ganz sicher zu gehen, das es verstanden wird:

self.moviesTable.setModel(self.proxy_model)

Muss da stehen.

Bis zum nächsten Fehler.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Die Zeile »self.moviesTable.setModel(self.proxy_model)« hatte ich auch schon versucht. Dann erscheint der Fehler

Code: Alles auswählen

  File "D:\__Sicherungsdaten\_Programmiersprachen\PycharmProjects\MovieMusicList\ListMovs.py", line 39, in __init__
    self.moviesTable.setModel(self.proxy_model)
TypeError: QTableWidget.setModel() is a private method
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Und schon wieder frage ich mich, woher Du die Information hast, dass man das somacht?
Die Dokumentation sagt doch ganz klar, dass serModel nicht öffentlich ist. Wenn Du ein Modell setzen willst, musst Du ein QTableView benutzen.
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

Und ich frage mich, warum man mir hier immer wieder nur irgendwelche Antworten um die Ohren wirft, mit denen ich nicht viel anfangen kann, obwohl ich um die richtigen Zeilen für meinen Code mit Erklärung bat. Ich bin immer noch Anfänger, und mit solchen Antworten komme ich leider kein Stück weiter :( :roll:

__deets__ schrieb »Und um ganz sicher zu gehen, das es verstanden wird: self.moviesTable.setModel(self.proxy_model) Muss da stehen.« das heißt für mich eigentlich, dass dies die korrekte Zeile ist. Oder sehe ich das falsch??
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das wäre die korrekte Zeile, wenn du den korrekten View verwenden würdest. Tust du halt nicht. Kann keiner wissen. Deine Experimente bleiben ja weitestenteils im Dunkeln. Niemand kennt den gesamten Code, niemand kennt die .ui-Datei. Und den Hinweis, das du nicht genug Kontext lieferst, den gabs ja schon häufiger. Verbessert sich auch nichts, also ist es auch kein Wunder, das man dir keine besseren Antworten geben kann.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@KlaRo: *Warum* kannst Du damit nichts anfangen? Wie gesagt, das verstehen der Klassen und deren Zusammenhänge kann Dir niemand abnehmen und es ist in der Qt-Dokumentation ausführlich erklärt. Was genau verstehst Du dort nicht? Hier hat eher keiner Lust Dir jetzt genau nur diesen winzigen Teil zu zeigen, den Du ohne das Gesamtbild eher nicht verstehen wirst. „Model/View Programming“ ist ein ziemlich umfangreiches Kapitel in der Qt-Dokumentation weil das eine Sammlung von Konzepten umfasst, die zusammenspielen. Da gibt's Text mit Erklärungen, Diagramme, Beispielquelltext. Das steht da alles schon, es macht also wenig Sinn das hier stückchenweise noch mal zu wiederholen, also letztlich hier auf Zuruf ins Forum zu kopieren, weil jemand das nicht an der Quelle lesen möchte.

__deets__ ging halt davon aus, dass `self.moviesTable` der View ist, wie er ja auch im Text schrieb. Dass Du da ein `QTableWidget` stattdessen hast, ist am Code nicht zu sehen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
KlaRo
User
Beiträge: 32
Registriert: Samstag 27. Januar 2024, 10:38

__deets__ hat geschrieben: Sonntag 10. März 2024, 17:33 Das wäre die korrekte Zeile, wenn du den korrekten View verwenden würdest. Tust du halt nicht. Kann keiner wissen. Deine Experimente bleiben ja weitestenteils im Dunkeln. Niemand kennt den gesamten Code, niemand kennt die .ui-Datei. Und den Hinweis, das du nicht genug Kontext lieferst, den gabs ja schon häufiger. Verbessert sich auch nichts, also ist es auch kein Wunder, das man dir keine besseren Antworten geben kann.
Ich benutze ein QtableWidget, da ich u.a. eine Tabelle mit Überschriften haben wollte und bei Doppelklick auf ein Item sich die entsprechende Datei öffnen soll.

Der Code der UI-Datei:

Code: Alles auswählen

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\__Sicherungsdaten\_Programmiersprachen\PycharmProjects\MovieMusicList\GUI\GUI_Movies.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowModality(QtCore.Qt.WindowModal)
        MainWindow.resize(1800, 1000)
        MainWindow.setFocusPolicy(QtCore.Qt.NoFocus)
        MainWindow.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setEnabled(True)
        self.centralWidget.setObjectName("centralWidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralWidget)
        self.gridLayout_2.setContentsMargins(11, 11, 11, 11)
        self.gridLayout_2.setSpacing(6)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setSpacing(6)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.newEntryButton = QtWidgets.QPushButton(self.centralWidget)
        self.newEntryButton.setToolTip("")
        self.newEntryButton.setObjectName("newEntryButton")
        self.horizontalLayout_2.addWidget(self.newEntryButton)
        self.saveCsvButton = QtWidgets.QPushButton(self.centralWidget)
        self.saveCsvButton.setToolTip("")
        self.saveCsvButton.setObjectName("saveCsvButton")
        self.horizontalLayout_2.addWidget(self.saveCsvButton)
        self.saveXlsButton = QtWidgets.QPushButton(self.centralWidget)
        self.saveXlsButton.setToolTip("")
        self.saveXlsButton.setObjectName("saveXlsButton")
        self.horizontalLayout_2.addWidget(self.saveXlsButton)
        self.gridLayout_2.addLayout(self.horizontalLayout_2, 15, 0, 1, 1)
        self.progressBar = QtWidgets.QProgressBar(self.centralWidget)
        self.progressBar.setEnabled(True)
        self.progressBar.setProperty("value", 13)
        self.progressBar.setOrientation(QtCore.Qt.Horizontal)
        self.progressBar.setInvertedAppearance(False)
        self.progressBar.setObjectName("progressBar")
        self.gridLayout_2.addWidget(self.progressBar, 16, 0, 1, 1)
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
        self.horizontalLayout_5.setSpacing(6)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.readAllMoviesButton = QtWidgets.QPushButton(self.centralWidget)
        self.readAllMoviesButton.setToolTip("")
        self.readAllMoviesButton.setObjectName("readAllMoviesButton")
        self.horizontalLayout_5.addWidget(self.readAllMoviesButton)
        self.readMainMoviesButton = QtWidgets.QPushButton(self.centralWidget)
        self.readMainMoviesButton.setToolTip("")
        self.readMainMoviesButton.setObjectName("readMainMoviesButton")
        self.horizontalLayout_5.addWidget(self.readMainMoviesButton)
        self.updateListButton = QtWidgets.QPushButton(self.centralWidget)
        self.updateListButton.setToolTip("")
        self.updateListButton.setObjectName("updateListButton")
        self.horizontalLayout_5.addWidget(self.updateListButton)
        self.addListButton = QtWidgets.QPushButton(self.centralWidget)
        self.addListButton.setToolTip("")
        self.addListButton.setObjectName("addListButton")
        self.horizontalLayout_5.addWidget(self.addListButton)
        self.gridLayout_2.addLayout(self.horizontalLayout_5, 13, 0, 1, 1)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setSpacing(6)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.count_vids_lab = QtWidgets.QLabel(self.centralWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.count_vids_lab.sizePolicy().hasHeightForWidth())
        self.count_vids_lab.setSizePolicy(sizePolicy)
        self.count_vids_lab.setMinimumSize(QtCore.QSize(180, 15))
        self.count_vids_lab.setMaximumSize(QtCore.QSize(180, 15))
        self.count_vids_lab.setObjectName("count_vids_lab")
        self.horizontalLayout.addWidget(self.count_vids_lab)
        self.count_vids_tbr = QtWidgets.QTextEdit(self.centralWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.count_vids_tbr.sizePolicy().hasHeightForWidth())
        self.count_vids_tbr.setSizePolicy(sizePolicy)
        self.count_vids_tbr.setMinimumSize(QtCore.QSize(100, 22))
        self.count_vids_tbr.setMaximumSize(QtCore.QSize(100, 22))
        self.count_vids_tbr.setBaseSize(QtCore.QSize(0, 0))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        self.count_vids_tbr.setPalette(palette)
        self.count_vids_tbr.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.count_vids_tbr.setFrameShadow(QtWidgets.QFrame.Plain)
        self.count_vids_tbr.setLineWidth(1)
        self.count_vids_tbr.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
        self.count_vids_tbr.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.count_vids_tbr.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
        self.count_vids_tbr.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse)
        self.count_vids_tbr.setObjectName("count_vids_tbr")
        self.horizontalLayout.addWidget(self.count_vids_tbr)
        self.no_vids_lab = QtWidgets.QLabel(self.centralWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.no_vids_lab.sizePolicy().hasHeightForWidth())
        self.no_vids_lab.setSizePolicy(sizePolicy)
        self.no_vids_lab.setMinimumSize(QtCore.QSize(130, 15))
        self.no_vids_lab.setMaximumSize(QtCore.QSize(130, 15))
        self.no_vids_lab.setBaseSize(QtCore.QSize(0, 0))
        self.no_vids_lab.setWordWrap(False)
        self.no_vids_lab.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse)
        self.no_vids_lab.setObjectName("no_vids_lab")
        self.horizontalLayout.addWidget(self.no_vids_lab)
        self.no_vids_tbr = QtWidgets.QTextEdit(self.centralWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.no_vids_tbr.sizePolicy().hasHeightForWidth())
        self.no_vids_tbr.setSizePolicy(sizePolicy)
        self.no_vids_tbr.setMinimumSize(QtCore.QSize(0, 22))
        self.no_vids_tbr.setMaximumSize(QtCore.QSize(16777215, 22))
        self.no_vids_tbr.setBaseSize(QtCore.QSize(0, 0))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
        self.no_vids_tbr.setPalette(palette)
        self.no_vids_tbr.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.no_vids_tbr.setFrameShadow(QtWidgets.QFrame.Plain)
        self.no_vids_tbr.setLineWidth(1)
        self.no_vids_tbr.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
        self.no_vids_tbr.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.no_vids_tbr.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
        self.no_vids_tbr.setObjectName("no_vids_tbr")
        self.horizontalLayout.addWidget(self.no_vids_tbr)
        self.gridLayout_2.addLayout(self.horizontalLayout, 4, 0, 1, 1)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setSpacing(6)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.lineEdit_Titel = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Titel.setClearButtonEnabled(True)
        self.lineEdit_Titel.setObjectName("lineEdit_Titel")
        self.horizontalLayout_3.addWidget(self.lineEdit_Titel)
        self.lineEdit_Gr = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Gr.setClearButtonEnabled(True)
        self.lineEdit_Gr.setObjectName("lineEdit_Gr")
        self.horizontalLayout_3.addWidget(self.lineEdit_Gr)
        self.lineEdit_Vers = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Vers.setClearButtonEnabled(True)
        self.lineEdit_Vers.setObjectName("lineEdit_Vers")
        self.horizontalLayout_3.addWidget(self.lineEdit_Vers)
        self.lineEdit_Spr = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Spr.setClearButtonEnabled(True)
        self.lineEdit_Spr.setObjectName("lineEdit_Spr")
        self.horizontalLayout_3.addWidget(self.lineEdit_Spr)
        self.lineEdit_Subs = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Subs.setClearButtonEnabled(True)
        self.lineEdit_Subs.setObjectName("lineEdit_Subs")
        self.horizontalLayout_3.addWidget(self.lineEdit_Subs)
        self.lineEdit_Format = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Format.setClearButtonEnabled(True)
        self.lineEdit_Format.setObjectName("lineEdit_Format")
        self.horizontalLayout_3.addWidget(self.lineEdit_Format)
        self.lineEdit_Jahr = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Jahr.setClearButtonEnabled(True)
        self.lineEdit_Jahr.setObjectName("lineEdit_Jahr")
        self.horizontalLayout_3.addWidget(self.lineEdit_Jahr)
        self.lineEdit_Aufl = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Aufl.setClearButtonEnabled(True)
        self.lineEdit_Aufl.setObjectName("lineEdit_Aufl")
        self.horizontalLayout_3.addWidget(self.lineEdit_Aufl)
        self.lineEdit_B = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_B.setClearButtonEnabled(True)
        self.lineEdit_B.setObjectName("lineEdit_B")
        self.horizontalLayout_3.addWidget(self.lineEdit_B)
        self.lineEdit_H = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_H.setClearButtonEnabled(True)
        self.lineEdit_H.setObjectName("lineEdit_H")
        self.horizontalLayout_3.addWidget(self.lineEdit_H)
        self.lineEdit_Brate = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Brate.setClearButtonEnabled(True)
        self.lineEdit_Brate.setObjectName("lineEdit_Brate")
        self.horizontalLayout_3.addWidget(self.lineEdit_Brate)
        self.lineEdit_LZ = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_LZ.setClearButtonEnabled(True)
        self.lineEdit_LZ.setObjectName("lineEdit_LZ")
        self.horizontalLayout_3.addWidget(self.lineEdit_LZ)
        self.lineEdit_L = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_L.setClearButtonEnabled(True)
        self.lineEdit_L.setObjectName("lineEdit_L")
        self.horizontalLayout_3.addWidget(self.lineEdit_L)
        self.lineEdit_Verz = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_Verz.setClearButtonEnabled(True)
        self.lineEdit_Verz.setObjectName("lineEdit_Verz")
        self.horizontalLayout_3.addWidget(self.lineEdit_Verz)
        self.gridLayout_2.addLayout(self.horizontalLayout_3, 5, 0, 1, 1)
        self.moviesTable = QtWidgets.QTableWidget(self.centralWidget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(8)
        self.moviesTable.setFont(font)
        self.moviesTable.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
        self.moviesTable.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked)
        self.moviesTable.setAlternatingRowColors(True)
        self.moviesTable.setGridStyle(QtCore.Qt.SolidLine)
        self.moviesTable.setWordWrap(True)
        self.moviesTable.setObjectName("moviesTable")
        self.moviesTable.setColumnCount(14)
        self.moviesTable.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(8, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(9, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(10, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(11, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(12, item)
        item = QtWidgets.QTableWidgetItem()
        self.moviesTable.setHorizontalHeaderItem(13, item)
        self.moviesTable.horizontalHeader().setVisible(True)
        self.moviesTable.horizontalHeader().setCascadingSectionResizes(False)
        self.moviesTable.horizontalHeader().setDefaultSectionSize(100)
        self.moviesTable.horizontalHeader().setMinimumSectionSize(20)
        self.moviesTable.horizontalHeader().setSortIndicatorShown(True)
        self.moviesTable.horizontalHeader().setStretchLastSection(False)
        self.moviesTable.verticalHeader().setVisible(True)
        self.moviesTable.verticalHeader().setCascadingSectionResizes(False)
        self.moviesTable.verticalHeader().setDefaultSectionSize(20)
        self.moviesTable.verticalHeader().setMinimumSectionSize(20)
        self.gridLayout_2.addWidget(self.moviesTable, 6, 0, 7, 1)
        MainWindow.setCentralWidget(self.centralWidget)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)
        self.actionSpeichern = QtWidgets.QAction(MainWindow)
        self.actionSpeichern.setObjectName("actionSpeichern")
        self.actionOpen = QtWidgets.QAction(MainWindow)
        self.actionOpen.setObjectName("actionOpen")
        self.actionSave = QtWidgets.QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Film-Liste"))
        self.newEntryButton.setText(_translate("MainWindow", "Eintrag am Ende der Tabelle erstellen"))
        self.saveCsvButton.setText(_translate("MainWindow", "Tabelle als CSV-Datei speichern"))
        self.saveXlsButton.setText(_translate("MainWindow", "Tabelle als XLS-Datei speichern"))
        self.readAllMoviesButton.setText(_translate("MainWindow", "Viedeos aus Verzeichnis (mit Unterordner) auslesen"))
        self.readMainMoviesButton.setText(_translate("MainWindow", "Viedeos aus Verzeichnis (ohne Unterordner) auslesen"))
        self.updateListButton.setText(_translate("MainWindow", "Liste nur aktualisieren"))
        self.addListButton.setText(_translate("MainWindow", "Liste aktualisieren und ergänzen"))
        self.count_vids_lab.setText(_translate("MainWindow", "Filmdateien / Dateien falscher Typ"))
        self.count_vids_tbr.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">0</p></body></html>"))
        self.no_vids_lab.setText(_translate("MainWindow", "Nicht aufgelistete Dateien:"))
        self.lineEdit_Titel.setPlaceholderText(_translate("MainWindow", "Titel"))
        self.lineEdit_Gr.setPlaceholderText(_translate("MainWindow", "Größe"))
        self.lineEdit_Vers.setPlaceholderText(_translate("MainWindow", "Ton-Version"))
        self.lineEdit_Spr.setPlaceholderText(_translate("MainWindow", "Sprache"))
        self.lineEdit_Subs.setPlaceholderText(_translate("MainWindow", "Subs"))
        self.lineEdit_Format.setPlaceholderText(_translate("MainWindow", "Dateiformat"))
        self.lineEdit_Jahr.setPlaceholderText(_translate("MainWindow", "Jahr"))
        self.lineEdit_Aufl.setPlaceholderText(_translate("MainWindow", "Auflösung"))
        self.lineEdit_B.setPlaceholderText(_translate("MainWindow", "Breite"))
        self.lineEdit_H.setPlaceholderText(_translate("MainWindow", "Höhe"))
        self.lineEdit_Brate.setPlaceholderText(_translate("MainWindow", "Bildrate"))
        self.lineEdit_LZ.setPlaceholderText(_translate("MainWindow", "Laufzeit h"))
        self.lineEdit_L.setPlaceholderText(_translate("MainWindow", "Laufzeit m"))
        self.lineEdit_Verz.setPlaceholderText(_translate("MainWindow", "Verzeichnis"))
        self.moviesTable.setSortingEnabled(True)
        item = self.moviesTable.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Titel"))
        item = self.moviesTable.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Größe"))
        item = self.moviesTable.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Ton-Version"))
        item = self.moviesTable.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Sprache"))
        item = self.moviesTable.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "Subs"))
        item = self.moviesTable.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "Dateiformat"))
        item = self.moviesTable.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "Jahr"))
        item = self.moviesTable.horizontalHeaderItem(7)
        item.setText(_translate("MainWindow", "Auflösung"))
        item = self.moviesTable.horizontalHeaderItem(8)
        item.setText(_translate("MainWindow", "Breite"))
        item = self.moviesTable.horizontalHeaderItem(9)
        item.setText(_translate("MainWindow", "Höhe"))
        item = self.moviesTable.horizontalHeaderItem(10)
        item.setText(_translate("MainWindow", "Bildrate"))
        item = self.moviesTable.horizontalHeaderItem(11)
        item.setText(_translate("MainWindow", "Laufzeit h"))
        item = self.moviesTable.horizontalHeaderItem(12)
        item.setText(_translate("MainWindow", "Laufzeit m"))
        item = self.moviesTable.horizontalHeaderItem(13)
        item.setText(_translate("MainWindow", "Verzeichnis"))
        self.actionSpeichern.setText(_translate("MainWindow", "Speichern"))
        self.actionOpen.setText(_translate("MainWindow", "Open"))
        self.actionSave.setText(_translate("MainWindow", "Speichern"))
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jemand anderes hat hier gerade ein aehnliches Problem, und da habe ich das hier gebaut: viewtopic.php?p=427647#p427647

Damit kann ich ein Model dank Proxy-Model sortierbar machen. Und beachte: QTableView, *nicht* QTableWidget wurde benutzt. Laut C++-Doku hat QTableWidget zwar setModel, das finde ich verwirrend. Aber es ist auch nicht dazu gedacht, mit eigenen Models zu arbeiten, warum auch immer es dann die Methode hat... ggf. ist das dann in Python umgesetzt, weil es in C++ nicht geht, die sichtbarkeit einzuschraenken, aber habe ich nicht geprueft.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: `QTableWidget` erbt von `QTableView`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja eben. Dann sollte es ja auch setModel erben, und laut https://doc.qt.io/qt-6/qtablewidget-members.html hat es das auch. In C++. Warum es den dann Fehler der hier zu sehen war gibt, ist mir eben unklar.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Im C++-Header ist `setModel()` in `QTableWidget` als ``private`` deklariert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

:roll: das ist natuerlich grober Unfug. Zum einen, dass deren tooling mir das dann nicht aus der Liste schmeisst. Das man in den Code schauen muss, ist ja nun nicht so gedacht. Zum zweiten, dass es das Lisskov-Prinzip verletzt. Und zu guter Letzt ist es semantisch natuerlich Quark:

Code: Alles auswählen

#include <iostream>
class Base {
public:
  virtual void test() {
    std::cout << "Base::test\n";
  }
};


class A : public Base {
private:
  void test() override {
    std::cout << "A::test\n";
  }
};

int main(int argc, char *argv[])
{
  A a;
  // a.test(); // geht nicht, private
  Base* b = &a;
  b->test();  // Gibt A::test aus
  return 0;
}
Naja. Dreckecken hat wohl jedes Framework.
Antworten