[PyQt] QSqlTableModel.beforeInsert signal (new style signal/slot)

KONTRA, Gergely pihentagy at gmail.com
Fri Dec 3 16:19:00 GMT 2010


On Fri, Dec 3, 2010 at 16:06, Phil Thompson <phil at riverbankcomputing.com>wrote:

> On Fri, 3 Dec 2010 15:46:55 +0100, "KONTRA, Gergely" <pihentagy at gmail.com>
> wrote:
> > Hi!
> >
> > I am trying to connect the beforeInsert signal of a QSqlTableModel,
> > and having some problems.
> >
> > I've found this similar thread:
> > http://www.mail-archive.com/pyqt@riverbankcomputing.com/msg20117.html
> >
> > However, I am using pyqt with py3k, so I prefer the new style signal
> > and slots, but I appreciate any working solution...
> >
> > So my attempt based on the thread:
> > class BatteryMain(base_class, form_class):
> >        # ...
> >        def cycle_started(self, record):
> >                print("Inserting {!r}".format(record))
> >
> >        def battery_load(self, filename):
> >                self.cycles_model = QSqlTableModel(db=self.battery_db)
> >                self.connect(self.cycles_model,
> > SIGNAL("beforeInsert(QSqlRecord
> > &)"), self.cycle_started)
> >
> > RESULT:
> > QObject::connect: Cannot queue arguments of type 'QSqlRecord&'
> > (Make sure 'QSqlRecord&' is registered using qRegisterMetaType().)
> >
> > Another attempt with new style signals and slots:
> >
> > class BatteryMain(base_class, form_class):
> >        # ...
> >        @pyqtSlot('QSqlRecord &')
> >        def cycle_started(self, record):
> >                print("Inserting {!r}".format(record))
> >
> >        def battery_load(self, filename):
> >                self.cycles_model = QSqlTableModel(db=self.battery_db)
> >
> self.cycles_model.beforeInsert.connect(self.cycle_started)
> >
> > RESULT:
> >  File "D:\prg\biQazo\biQazo.py", line 145, in battery_load
> >    self.cycles_model.beforeInsert.connect(self.cycle_started)
> > TypeError: connect() failed between beforeInsert(QSqlRecord) and
> unislot()
> >
> > Could anybody tell me the correct syntax, please?
>
> It's not a syntax problem.
>
> Are you using threads?
>

Yes, I am using threads. Is it valid to insert into a QSqlTableModel a new
row in a QThread?
I have a worker thread, which collects data, and inserts it into the
QSqlTableModel, and I'd like to get notified with this beforeInsert signal
in the GUI thread.

>
> I would guess that you can't use signals that take a QSqlRecord across
> threads, probably because they are not passed as const (to allow them to be
> updated by a connected slot).
>
That sounds sad. I thought this signal will make it easy to communicate
between threads.
Then what is the solution to communicate between the worker thread, and the
main GUI thread? Cutsom signal?

thanks
Gergo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20101203/dca4195b/attachment.html>


More information about the PyQt mailing list