QAbstractItemModel wird nicht korrekt angezeigt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Freitag 14. März 2008, 00:01

Hallo liebe Nachtschwärmer, :-)

Ich habe eine MDI Anwendung in der ich über die addWindow() Methode ein
QMainWindow Object namens "DbEditor" hinzufü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?

Hier die Sourcen für den "DbEditor",

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 hier die Sourcen des "TreeModell",

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)

        .
        .
        .
und für den Fall daß ein Oberschlauer nach den Sourcen der MDI fragt,

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
Antworten