QT Creator Erreur (pas de match pour l'opérateur =)
-
22-12-2019 - |
Question
Je reçois cette erreur à chaque fois que je construis mon code.J'utilise QT Creator 3.1, (5.2.1 construire)
erreur:pas de match for 'operator+' (opérande de ce type sont 'QStringList' et de 'const char [2]')
Voici un extrait de code, j'espère que ça peut aider (l'astérisque ligne est l'endroit où l'erreur est mise en surbrillance)
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);
La solution
Le problème, c'est que vous essayez de concaténer une QStringList avec QStrings depuis
QStandardPaths::standardLocations(QStandardPaths::HomeLocation)
retourne un QStringList
.
Vous devez gt l'élément que vous souhaitez réutiliser, par exempleà l'aide de la .first()
la méthode.Vous pouvez écrire ceci:
MainPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).first() + "/" + un.applicationName() + "/Data";
Notez que j'ai juste ajouté un manquant "/" entre le nom de l'application et les "Données" parce que je pense que ce serait plus logique d'utiliser, mais n'hésitez pas à rejeter la modifier si vous le souhaitez.
Mais puisque vous semblez être intéressé par le répertoire de données de l'emplacement, je suggère d'utiliser l'dédié enum de QStandardPaths
:
ou il serait encore mieux d'utiliser:
QStandardPaths::DataLocation 9 Renvoie un emplacement de répertoire où la persistance des données d'application peuvent être stockées.QCoreApplication::organizationName et QCoreApplication::applicationName sont annexés à l'emplacement du répertoire retourné pour GenericDataLocation.
Vous pouvez écrire alors:
QDir Path(QStandardPaths::standardLocations(QStandardPaths::DataLocation).first());
En fait, si vous souhaitez éviter les .first()
appel, vous pourriez probablement utiliser la writableLocation() méthode comme suit:
QDir Path(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
=====================================================
Par curiosité, ce pourrait être aussi une alternative:
ou
comme suit:
QDir Path = QDir::home();
Path.cd(a.applicationName() + "Data");
ou
QDir Path(QDir::homePath() + "/" + a.applicationName() + "/Data");
Si cela ne suffit pas, il en est de même une autre solution de rechange:
QDir Path(QCoreApplication::applicationDirPath + "/Data");
Autres conseils
qstandardPaths :: StandardLocations Retournez QStringlist.Vous devriez utiliser QStringList :: Rejoindre ou QStringList :: at ou utilisez pour utiliser.MB Tu veux faire autre chose, mais je ne sais pas quoi parce que la variable Mainpath si mystérieuse=)