Re: [PyQt] QSqlTableModel.beforeInsert signal (new style signal/slot)
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)
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)
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)
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