Hello,
i have upgraded my linux development machine from pyqt 4.4.4 to 4.5.4 (and sip 4.7.9 to 4.8.2) and i am getting any errors with my application. My Qt version it is 4.5.2 but errors are related to pyqt version because if i downgrade pyqt all works, well obviously can be problems with my code (i think so), but i mean that with pyqt 4.4.4 the code works.

1) i am using a QThread to populate large sql queries data to a model in background. Inside the class run method i create a worker object (worker it is a QObject subclass) and run an event loop to connect the worker and the thread with signals and slots, it have been running fine with all pyqt 4.4 versions but i now get this error:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QueryModelThread(0xa00db20), parent's thread is QThread(0x9f0a748), current thread is QueryModelThread(0xa00db20)

code:
class QueryModelThread(QThread):
    def __init__(self, parent=None):
        super(QueryModelThread, self).__init__(parent)
        self.worker = None

    def executeModel(self, texto_query):
        self.emit(SIGNAL("executeModel"), texto_query)

    def executeQuery(self, texto_query):
        self.emit(SIGNAL("executeQuery"), texto_query)

    def stopIfRunning(self):
        if self.worker:
            self.worker.stopIfRunning()

    def run(self):
        worker = Worker()

        self.connect(self, SIGNAL("executeModel"), worker.slotExecuteModel)
        self.connect(worker, SIGNAL("finalizado"), self, SIGNAL("finalizado"))
        self.connect(worker, SIGNAL("redimensiona"), self, 
SIGNAL("redimensiona"))
        self.connect(worker, SIGNAL("comenzado"), self, SIGNAL("comenzado"))
        self.connect(worker, SIGNAL("nuevas_filas"), self, 
SIGNAL("nuevas_filas"))

        self.connect(self, SIGNAL("executeQuery"), worker.slotExecuteQuery)
self.connect(worker, SIGNAL("query_preparada"), self, SIGNAL("query_preparada"))

        self.worker = worker
        self.exec_()

init of the worker class:

class Worker(QObject):
    def __init__(self, parent=None):
        super(Worker, self).__init__(parent)
        self.db = database.conectarDbTienda("QueryModelThread")
        self.query = QSqlQuery(self.db)
        self.stop = self.corriendo = False


2) i have many models that use a set of shared methods (apart from Qt's models methods) so i created a python class (editor_documentos_base.EditorDocumentosBaseModel) with all this methods and in my models i use this multiple inheritance.

class AlbaranEntradaModel(QAbstractTableModel, editor_documentos_base.EditorDocumentosBaseModel):
    def __init__(self, parent):
        super(AlbaranProveedorModel, self).__init__()
        editor_documentos_base.EditorDocumentosBaseModel.__init__(self)

rowCount and columnCount are implemented in this base class and now when i call tableView.setModel(sampleModel) (where sampleModel it is the instance of one of my models) i get this errors: NotImplementedError: QAbstractTableModel.rowCount() is abstract and must be overridden NotImplementedError: QAbstractTableModel.columnCount() is abstract and must be overridden


3) i know that signals and slots have changed with this versions but i thought the old syntax it is still support for compatibility, i get this error emitting this signal, do i am wrong or this is other problem?

self.emit(SIGNAL("cambiaFoto(QVariant, QVariant)"), QVariant(), QVariant())
TypeError: argument 0 of signal PyQtProxy.ambiaFoto(QVariant,QVariant) has an invalid type


I have never detected a bug in PyQT, i think it is a great piece of software (sip too!) so i suppose all of this is my fault but i need a bit of help to understand where it is the problem, thanks in advance.

Regards,
Miguel Angel.



_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to