2017-09-01 2 views
0

Je veux écrire <CacheDir>/myProjectName<CacheDir> est la valeur de:Comment obtenir le nom du projet à partir du code C++?

QStandardPaths::writableLocation(QStandardPaths::CacheLocation) 

Mais je ne veux pas mon nom de hardcode projet en C++, car cela créerait 2 places pour mettre à jour. Y a-t-il un moyen de l'obtenir par programme?

+1

Ce qui définit « myProjectName »? Vous avez besoin de cette chose (quelle qu'elle soit) pour fournir le nom à la compilation de votre programme. Soit en tant que «define» ou variable dans un fichier ou * autre chose *. C++ en tant que langage n'a pas la notion d'un "nom de projet" - donc tout ce qui le définit doit l'exposer d'une manière que vous pouvez obtenir au cours de la compilation. –

Répondre

2

La façon standard Qt que les noms d'application sont gérés est avec QCoreApplication::applicationName() - bien sûr, vous devez le définir quelque part (généralement dans votre fonction main() où vous créez l'application).

Une fois que vous avez fait cela, le nom de l'application est réellement utilisé dans le cadre de QStandardPath spécifique à l'application - par ex. La documentation de CacheLocation indique que pour Windows, le CacheLocation est C:/Users/<USER>/AppData/Local/<APPNAME>/cache, ce qui signifie que le nom de l'application est déjà dans le chemin.

Donc, pour votre exemple, vous pouvez créer un chemin unique pour votre application comme ceci:

auto myCacheFile = QString("%1/cache.txt") 
      .arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); 
+0

Il est préférable de remplacer la concaténation de chaîne explicite par des chaînes de format: 'myCacheFile auto = QStringLiteral ("% 1 /% 2/cache.txt) .arg (QStandardPaths: writableLocation (QStandardPaths :: CacheLocation)). Arg (qApp.applicationName()) ". –