ich versuche gerade eine Schnittstelle zu CouchDB zu implementieren. Prinzipiell funktioniert das auch ganz gut. Allerdings basiert das Ganze auf asynchronen HTTP-Requests, das heißt, ich würde aus meinem Programm eine Anfrage verschicken und müsste die Antwort mit einem Signal abfangen. Wie das in der Anwendung aussehen würde, wage ich mir gar nicht auszumalen. Daher hätte ich zumindest einige Anfragen gerne synchron.
So mache ich es bisher:
Code: Alles auswählen
void QtCouchDB::checkConnection()
{
QUrl url = m_url;
url.setPath("/");
m_reply = m_networkAccessManager->get(QNetworkRequest(url));
connect(m_reply, SIGNAL(readyRead()), this, SLOT(slotCheckConnectionFinished()));
}
void QtCouchDB::slotCheckConnectionFinished()
{
const QByteArray tst = m_reply->readAll();
QString version = "";
QString ret(tst);
if (ret.contains("version"))
{
int end = ret.lastIndexOf("\"");
int start = ret.indexOf("version") + 10;
version = ret.mid(start, end-start);
}
emit connectionChecked(version);
}
Anstatt das Ergebnis mit emit zurück zu geben, hätte ich viel lieber einen Funktionsaufruf wie "QString QtCouchDB::checkConnection()" bei dem ich die Antwort gleich mit zurück gebe, auch wenn ich mir damit Hänger in der GUI einfangen könnte. Ich spreche ausschließlich eine lokale DB an, bei der es keine merklichen Verzögerungen geben dürfte.
Gibt es irgend eine Möglichkeit das hin zu bekommen? Ich mache mir hier Knoten in mein Gehirn und komme einfach auf keine Lösung.
Noch eine Frage am Rande. Welches Verfahren ist besser, wenn man eine allgemeine Version der Schnittstelle schreiben würde?
Vielen Dank
Heiko