2016-06-17 4 views
0

Ich versuche, die Combobox in QT 5.7 unter Verwendung der folgenden Code zu füllen:Kann nicht zurück QStringList von Lambda in eine Funktion

ui->comboBox_2->addItems([]() -> QStringList { 
     QDate date = QDate::currentDate(); 
     int current_year = date.toString("yyyy").toInt(); 
     QStringList year_list; 
     for (int i = 0; i <= 50; i++) { 
      year_list << QString::number(current_year - (50 - i)); 
     } 
     return year_list; 
    }); 

Aber es gibt mir diese Fehlermeldung: no viable conversion from '(lambda at ..)' to 'const QStringList'
Was ist das Problem?

+0

Das Problem ist wirklich in der Fehlermeldung angegeben: Sie übergeben die Instanz des Lambda an "addItems", und es weiß nicht, was damit zu tun ist ... –

Antwort

1

addItems erwartet eine QStringList, kein Lambda, die eine QStringList erzeugt, so dass Sie Ihr Lambda zu nennen haben den QStringList zu erhalten:

ui->comboBox_2->addItems([]() { ... }()); 
+0

Es funktioniert, aber ich bin verwirrt ... Ich dachte, du musst Lambda nicht aufrufen, damit es einen Wert zurückgibt. Trotzdem danke! – 7Y3RPXK3ETDCNRDD

+0

@ 7Y3RPXK3ETDCNRDD Ein Lambda ist ein Wert - eine Instanz eines Funktors - es ist eine vom Compiler erzeugte Klasse. In Ihrem Fall wäre es eine Instanz einer Klasse, die 'QStringList operator()()' member hat. Die Funktion 'addItems' will keine Instanz dieser Klasse, sondern eine Instanz von' QStringList'! Es gibt keine benutzerdefinierte Konvertierung, die Klasse hat keinen Operator QStringList() '. –

0

include() am Ende {} explizit dieses Lambda nennt Funktion.

Verwandte Themen