IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Segmentation Fault(coredump) QFileSystemModel, QSortFilterProxyModel


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Par défaut Segmentation Fault(coredump) QFileSystemModel, QSortFilterProxyModel
    Bonjour à tous

    Je tente de faire un petit explorer de fichiers qui s'intègrera dans un application plus conséquente.
    Tout s'exécute normalement, mais au bout d'un nombre(indéfini) de clics sur mon QTreeView afin d'ouvrir les répertoires, mon explorer plante avec le message suivant : Segmentation Fault(coredump)

    Le code ci-dessous est une version très allégé de mon code mais il reproduit le même problème.

    Si je supprime mon QSortFilterProxyModel et que mon QTreeview point directement sur le QFileSystemModel, le problème n'apparait plus.


    Pour info je suis en :
    Python 2.4.2
    PyQt 4.4.2
    Qt 4.5.0
    SunOs 5.8


    Merci pour votre aide
    Jean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    from PyQt4 import QtGui, QtCore
    import sys
     
    class Proxii(QtGui.QSortFilterProxyModel):
        def __init__(self, parent):
            QtGui.QSortFilterProxyModel.__init__(self, parent)
     
        def hasChildren(self, oModelIndex):
            oSourceIndex = self.mapToSource(oModelIndex)
            return self.sourceModel().hasChildren(oSourceIndex)
     
        def canFetchMore(self, oModelIndex):
            oSourceIndex = self.mapToSource(oModelIndex)
            return self.sourceModel().canFetchMore(oSourceIndex)
     
        def fetchMore(self, oModelIndex):
            oSourceIndex = self.mapToSource(oModelIndex)
            return self.sourceModel().fetchMore(oSourceIndex)
     
     
    class testExplo(QtCore.QObject):
        def __init__(self):
            QtCore.QObject.__init__(self)
     
            self.myTreeView = QtGui.QTreeView()
            self.myProxy = Proxii(self.myTreeView)
            self.myModel = QtGui.QFileSystemModel(self.myTreeView)
     
            #-- Model
            self.myModel.setRootPath("/home/")
            #-- Proxi
            self.myProxy.setSourceModel(self.myModel)
            #-- treeview
            self.myTreeView.setModel(self.myProxy)
     
            rootModelIndex = self.myModel.index("/home/")
            rootProxyIndex = self.myProxy.mapFromSource(rootModelIndex)
            self.myTreeView.setRootIndex(rootProxyIndex)
     
            self.myTreeView.show()
     
    app = QtGui.QApplication(sys.argv)
    myExplo = testExplo()
    end = app.exec_()

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut, je ne rencontre aucun problème en l'utilisant.

    Tu as des raisons de rester sous python 2.4 et Qt 4.5 ?

    Je ne dis pas que le problème vient de là, mais si tu as la possibilité de te mettre à niveau, ce serait préférable.

    Tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ gdb python
    $ (gdb) set args tonApply.py
    $ (gdb) run
    et voir ce que ça raconte après plantage.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Par défaut
    Bonjour VinsS
    Merci de me répondre aussi vite.
    Je ne suis malheureusement pas mettre des versions utilisées.

    J'ai fait ce que tu m'as proposé et voici le retour de gdb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread 1 (LWP 1)]
    QSortFilterProxyModelPrivate::proxy_to_source (this=0x2244b8, proxy_index=...) at ../../include/QtCore/../../src/corelib/tools/qmap.h:291
    291     ../../include/QtCore/../../src/corelib/tools/qmap.h: No such file or directory.
            in ../../include/QtCore/../../src/corelib/tools/qmap.h
    Current language:  auto
    The current source language is "auto; currently c++".
    A priori ça viendrait du QSortFilterProxyModelPrivate.
    Mais je ne vois pas ce que je peux y faire.
    Si tu as une idée, je suis preneur

    Merci beaucoup

    Jean

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je vois un "No such file or directory."

    Il faudrait peut-être investiger la-dessus, quoique cela me surprendrait que cela entraine
    une segfault plutôt qu'une exception.

    Mais je viens de voir ton message sur la mailing list de PyQt, je te recommande d'y ajouter
    le résultat de gdb, il y aura bien quelqu'un que cela inspirera.

    J'avoue j'ai déjà galéré avec ce QTreeView.

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/04/2013, 15h50
  2. segmentation fault et coredump
    Par awalter1 dans le forum Linux
    Réponses: 5
    Dernier message: 08/09/2008, 11h49
  3. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  4. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43
  5. Memory fault(coredump)
    Par nono1 dans le forum C
    Réponses: 8
    Dernier message: 17/12/2002, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo