Forum: PC-Programmierung C++ Qt QString Rückgabe aus Lambda


von Kai (Gast)


Lesenswert?

Hi Folks,

Ich nutze Qt5.6 + MSVC++2015 mit QT Creator.
Ich schaffe es nicht, einen QString aus einer Lambda-Funktion 
zurückzubekommen:

Folgenden Aufruf funktioniert:
1
 page->runJavaScript("document.getElementById('Content').innerHTML;", [](const QVariant &v) { qDebug() << v.toString(); });

Nun möchte ich etwas in der Art erreichen:
1
 
2
QString* str = new QString();
3
page->runJavaScript("document.getElementById('Content').innerHTML;", [str](const QVariant &v) {  str->append(v.toString()); });
4
qDebug() << *str;

Ich habe quasi schon alles was mit einfällt versucht:
[str] oder [&str]
QString str vs QString* str vs QString* str = new QString()
str = v.toString() vs str.append(v.toString) vs str = new 
QString(v.toString)

Entweder der Comiler meckert, das Programm stürzt ab oder der String ist 
leer.

Vielleicht gibt es noch eine Variante, die ich übersehen habe ?

Danke Kai

von Sven B. (scummos)


Lesenswert?

Ist runJavaScript synchron?

von tictactoe (Gast)


Lesenswert?

Folgendes funktioniert für mich:
1
#include <iostream>
2
#include <QtCore/QString>
3
using namespace std;
4
5
int main()
6
{
7
        QString str;
8
        auto f = [&str](const QString& s) { str += s; };
9
        f("Hallo ");
10
        f("Welt!");
11
        cout << str.toLocal8Bit().data() << endl;
12
}
Es schreibt eine Zeile
1
Hallo Welt!
Das ganze unter Linux.

von Kai (Gast)


Lesenswert?

Hi Sven,

Das wars...


Gruß Kai

von The D. (thedaz)


Lesenswert?

Falls es noch jemanden interessiert :

http://en.cppreference.com/w/cpp/language/lambda

Man kann für lambdas auch return parameter deklarieren. Die Syntax ist

[ capture-list ] ( params ) -> ret { body }

von Sven B. (scummos)


Lesenswert?

Das ist die Syntax um den Rückgabetyp explizit anzugeben und das hat in 
diesem Thread noch nie jemanden interessiert. Das ist auch kein "return 
parameter".

von The D. (thedaz)


Lesenswert?

Sven B. schrieb:
> Das ist die Syntax um den Rückgabetyp explizit anzugeben

Richtig

> und das hat in
> diesem Thread noch nie jemanden interessiert.

Sprich für dich, du kennst nicht alle, die diesen Thread lesen.

> Das ist auch kein "return parameter".

Vermutlich nicht das beste Wort für das Gemeinte, ok. Dann halt 'return 
value'.

von Sven B. (scummos)


Lesenswert?

The D. schrieb:
>> und das hat in
>> diesem Thread noch nie jemanden interessiert.
>
> Sprich für dich, du kennst nicht alle, die diesen Thread lesen.

Tomaten sind übrigens Nachtschattengewächse, so wie Kartoffeln auch.

P.S. Nein, auch nicht "return value". Wenn dann "return type".

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.