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);
War es hilfreich?

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:

QString QDir::homePath () [statisch]

oder

QDir QDir::home () [statisch]

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=)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top