QT-Ersteller-Fehler (keine Übereinstimmung für Operator =)
-
22-12-2019 - |
Frage
Ich erhalte diese Fehlermeldung jedes Mal, wenn ich meinen Code erstelle.Ich verwende QT Creator 3.1 (5.2.1 Build)
Fehler:Keine Übereinstimmung für „Operator+“ (Operandentypen sind „QStringList“ und „const char [2]“)
Hier ist ein Codeausschnitt, ich hoffe, er kann helfen (in der Asterix-Zeile ist der Fehler hervorgehoben)
int main(int argc, char *argv[])
{
Shutdown = false;
QApplication a(argc, argv);
a.setApplicationName("aQtLow");
//Create default data paths if they don't exist
QDir Path;
**MainPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation) + "/" + a.applicationName() + "Data";**
Path.setPath(MainPath);
Lösung
Das Problem besteht darin, dass Sie seitdem versuchen, eine QStringList mit QStrings zu verketten
QStandardPaths::standardLocations(QStandardPaths::HomeLocation)
gibt a zurück QStringList
.
Sie müssten das Element angeben, das Sie wiederverwenden möchten, z. B.Verwendung der .first()
Methode.Du könntest Folgendes schreiben:
MainPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).first() + "/" + a.applicationName() + "/Data";
Beachten Sie, dass ich gerade ein fehlendes „/“ zwischen dem Anwendungsnamen und den „Daten“ eingefügt habe, weil ich denke, dass dies logischer wäre, aber Sie können diese Änderung gerne ablehnen, wenn Sie möchten.
Da Sie jedoch offenbar am Speicherort des Datenverzeichnisses interessiert sind, würde ich vorschlagen, die dedizierte Enumeration von zu verwenden QStandardPaths
:
oder es wäre noch besser, einfach zu verwenden:
QStandardPaths::DataLocation 9 Gibt einen Verzeichnisspeicherort zurück, an dem persistente Anwendungsdaten gespeichert werden können.QCoreApplication::organizationName und QCoreApplication::applicationName werden an den für GenericDataLocation zurückgegebenen Verzeichnisspeicherort angehängt.
Dann könntest du das schreiben:
QDir Path(QStandardPaths::standardLocations(QStandardPaths::DataLocation).first());
In der Tat, wenn Sie das vermeiden möchten .first()
Rufen Sie an, Sie könnten das wahrscheinlich gebrauchen beschreibbareLocation() Methode wie folgt:
QDir Path(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
=====================================================
Aus Neugier könnte dies auch eine Alternative sein:
oder
wie folgt:
QDir Path = QDir::home();
Path.cd(a.applicationName() + "Data");
oder
QDir Path(QDir::homePath() + "/" + a.applicationName() + "/Data");
Wenn das nicht reicht, gibt es sogar noch etwas noch eine Alternative:
QDir Path(QCoreApplication::applicationDirPath + "/Data");
Andere Tipps
qstandardPaths :: Standardlokationen Rendite QStringlist.Sie sollten QStringlist verwenden :: Join oder QStringlist :: bei oder verwenden Sie FOREACH.MB Sie möchten etwas anderes tun, aber ich weiß nicht, was den variablen Hauptweg so geheimnisvoll ist=)