Это жесть
connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(waitForWorkersCloser()));
...
void AsynchDB::waitForWorkersCloser() {
delete this;
}
Что будет если AsynchDB был создан в стеке или скажем таким образом:
QScopedPointer<AsynchDB> db(new AsynchDB);
Кроме того, где тут асинхронизм?
void AsynchDB::execute(const QString &query, bool waitForIt) {
if(waitForIt) {
QEventLoop loop;
connect(m_worker, SIGNAL(done()), &loop, SLOT(quit()));
emit executeInWorker( query );
loop.exec();
} else {
emit executeInWorker( query );
while(!m_worker->isBusy());
}
}
если метод
const bool AsynchDB::isBusy() {
return busy || m_worker->isBusy();
}
то полюбому ждем завершения выполнения запроса, так?
Ну, а это вообще без комментариев:
void AsynchDB::execute(const QString &query, bool waitForIt) {
if(waitForIt) {
QEventLoop loop;
connect(m_worker, SIGNAL(done()), &loop, SLOT(quit()));
emit executeInWorker( query );
loop.exec();
} else {
emit executeInWorker( query );
while(!m_worker->isBusy());
}
}
const QSqlError& AsynchDB::lastError() {
return m_worker->lastError();
}
const Recordsets& AsynchDB::recordsets() {
return m_worker->recordsets();
}
const Recordset& AsynchDB::recordset(const int recordsetNumber) {
return m_worker->recordsets().at(recordsetNumber);
}
const bool AsynchDB::isBusy() {
return busy || m_worker->isBusy();
}
const bool AsynchDB::isOpen() {
return !busy && m_worker->isOpen();
}