QAbstractItemModel wird nicht korrekt angezeigt

Alles rund um die Programmierung mit Qt
Antworten
feldmaus
Beiträge: 32
Registriert: 25. September 2007 21:08

QAbstractItemModel wird nicht korrekt angezeigt

Beitrag von feldmaus »

Hi Alle,

ich bin mir nicht sicher ob es hier erwünscht ist ein Frage zu stellen, die mir
in einem anderen Board nicht beantwortet werden konnte, aber ich tue es
einfach mal. Link zum anderen Board


Ich habe eine MDI Anwendung in PyQt4 geschrieben in der ich über die
addWindow() Methode ein QMainWindow Object namens "DbEditor"
inzufüge.
Zu dem Objekt namens "DbEditor" füge ich ein QTreeView Element hinzu
mit der Methode setCentralWidget(). Das QTreeView Objekt wird mit einem
QAbstractItemModel verbunden namens "TreeModell". Von dem QTreeView
Objekt kann man was sehen. Von dem Objekt namens "TreeModell" wird
mir allerdings nichts in dem QTreeView Objekt angezeigt.

1.) Habe ich vielleicht ein show() vergessen?
2.) Wo muß ich überall ein show() machen?
3.) Muß ich noch ein QtGui.QApplication() Objekt erzeugen für das
QAbstractItemModel() ?
4.) Wo muß ein QtGui.QApplication() Objekt erzeugt werden?
5.) Habe ich ein addWindow() vergessen?
6.) Wo muß ich ein addWindow() machen?
7.) Sonstige Ideen?

Hier die Sourcen für den "DbEditor", hier werden nur das grafische Layout,
die Aktionen koordiniert, und das "TreeModel" mit der "TreeView" erzeugt.

Code: Alles auswählen

#!/usr/bin/env python2.5
#
# dbeditor.py
#
import sys, os 
from PyQt4 import QtCore, QtGui
from treemodell import *

class DbEditor(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.createBaumAnsicht()
        ...

    def createBaumAnsicht(self):
    # Es wird eine Ansicht fuer allgemeine Baum-Ansichten ueber die QTreeView
    # Klasse erstellt. In diese Ansicht wird ein Baum-Modell eingefuegt.
    # Dieses Baum-Modell kann jeder Zeit geaendert werden und aendert die 
    # Baum-Ansicht gleich automatisch mit. Das Baum-Modell wird mit den Daten gefuettert.
        self.baumModell = TreeModell()
        self.baumAnsicht = QtGui.QTreeView()
    # Die baumAnsicht soll automatisch aktualisiert werden bei Aenderung der Daten im BaumModell
        self.baumAnsicht.setModel(self.baumModell)
        self.setCentralWidget(self.baumAnsicht)

    def createNewDb(self):
        dbDateiname = QtGui.QFileDialog.getSaveFileName(self,
                                                        self.tr("Create a new DataBase"),
                                                        self.__lastWorkDir,
                                                        self.tr("DataBase Files (*.db);;All Files (*)"))
        if not dbDateiname.isEmpty():
            file(dbDateiname,'w')
            self.openDb(dbDateiname)
    
    def openDb(self,  dbDateiname=None):
        if dbDateiname == None:
            dbDateiname = QtGui.QFileDialog.getOpenFileName(self,
                                                        self.tr("Open a DataBase"),
                                                        self.__lastWorkDir,
                                                        self.tr("DataBase Files (*.db);;All Files (*)"))
        # Nur das BaumModell ist direkt an die Schnittstelle angeschlossen.
        self.baumModell.openDb(dbDateiname)

        .
        .
        .

    def closeEvent(self, event):
        self.writeSettings()
        event.accept()
und nun die Sourcen des "TreeModell", hier wird die eigentliche
Darstellung der Daten festgelegt,

Code: Alles auswählen

#!/usr/bin/env python2.5
#
# treemodell.py
#
import sys, os 
from PyQt4 import QtCore, QtGui
from dbiface import *


class TreeItem:
    def __init__(self, data, parent=None):
        self.parentItem = parent
        self.itemData = data
        self.childItems = []

    def appendChild(self, item):
        self.childItems.append(item)
        
        .
        .
        .

    def row(self):
        if self.parentItem:
            return self.parentItem.childItems.index(self)

        return 0


class TreeModell(QtCore.QAbstractItemModel):
    def __init__(self, parent=None):
        QtCore.QAbstractItemModel.__init__(self, parent)
        rootData = []
        rootData.append(QtCore.QVariant("DB"))
        rootData.append(QtCore.QVariant("Tabelle"))
        rootData.append(QtCore.QVariant("Schluessel"))
        rootData.append(QtCore.QVariant("Wert"))
        self.rootItem = TreeItem(rootData)

    def openDb(self, dbDateiname=''):
        # Welche Tabellen gibt es?
        query = ['Select name FROM sqlite_master ORDER BY name']
        dbInterface = DbIface(dbDateiname)
        tabUebersicht = dbInterface.getTbls(query)

        .
        .
        .
nun die Sourcen der MDI wo der dbEditor über die show() Methode
angezeigt wird,

Code: Alles auswählen

#!/usr/bin/env python2.5
#
#hauptfenster.py
#
import sys
from PyQt4 import QtCore, QtGui
from reisehelfer import *
from dbeditor import *

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        
       	self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        
        self.workspace = QtGui.QWorkspace()
        self.workspace.setScrollBarsEnabled(True)
        self.setCentralWidget(self.workspace)
        ...
            
    def createReisehelfer(self):
        ReiseHelferFenster = ReiseHelfer(self)
        if not self.existUnterfenster("Reisehelfer"):
            self.workspace.addWindow(ReiseHelferFenster)            
            ReiseHelferFenster.show()

    def createDbEditor(self):
        editorFenster = DbEditor(self)
        if not self.existUnterfenster("DB Editor"):
            self.workspace.addWindow(editorFenster)            
            editorFenster.show()
        
        .
        .
        .
        
    def existUnterfenster(self,Title):
    	for window in self.workspace.windowList():
            if Title == window.windowTitle():
                return True
        return False
            

    def closeEvent(self, event):
        self.workspace.closeAllWindows()
        self.writeSettings()
        event.accept()


def runMainWindow(args):
    app = QtGui.QApplication(args)
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())
Grüße Markus
Zuletzt geändert von feldmaus am 14. März 2008 14:05, insgesamt 1-mal geändert.
hilefoks
Beiträge: 144
Registriert: 13. März 2008 16:09

Re: QAbstractItemModel wird nicht korrekt angezeigt

Beitrag von hilefoks »

Moin,

Sorry - diese Antwort wird dir nicht helfen, aber möglicherweise allen die ein ähnliches Problem haben...
feldmann_markus hat geschrieben:ich bin mir nicht sicher ob es hier erwünscht ist ein Frage zu stellen, die mir
in einem anderen Board nicht beantwortet werden konnte, aber ich tue es
einfach mal.
Es wär nett wenn du hier den Link zu deinem anderen Beitrag posten würdest und den Link zu diesem Beitrag in dem anderem Forum. Das würde zum einen Leuten helfen die das gleiche Problem haben und zum anderem bräuchte sich keiner mehr den Kopf zerbrechen wenn du Lösung in dem jeweils anderem Forum schon gefunden wurde.

MfG,
Hilefoks
Antworten