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

2010-12-03 Thread Phil Thompson
On Fri, 3 Dec 2010 17:19:00 +0100, "KONTRA, Gergely" 
wrote:
> On Fri, Dec 3, 2010 at 16:06, Phil Thompson
> wrote:
> 
>> On Fri, 3 Dec 2010 15:46:55 +0100, "KONTRA, Gergely"
>> 
>> 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?

Yes, or a custom event (which is how cross-thread signals are handled
anyway).

Phil
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


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

2010-12-03 Thread KONTRA, Gergely
On Fri, Dec 3, 2010 at 16:06, Phil Thompson wrote:

> On Fri, 3 Dec 2010 15:46:55 +0100, "KONTRA, Gergely" 
> 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
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

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

2010-12-03 Thread Phil Thompson
On Fri, 3 Dec 2010 15:46:55 +0100, "KONTRA, Gergely" 
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?

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).

Phil
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


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

2010-12-03 Thread KONTRA, Gergely
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?

thanks
Gergo
+-[ Gergely Kontra  ]--+
|   |
| Mobile:(+36 20)356 9656   |
|   |
+- "Olyan lángész vagyok, hogy poroltóval kellene járnom!" -+
___
PyQt mailing listPyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt