Comment référencer le dossier des ressources dans le code
Question
Je suis un portage c ++ application Qt de Windows à Mac OS X et ne peut pas envelopper la tête autour du concept de faisceau de .app. J'espère que quelqu'un peut me aider à comprendre.
vit mon exécutable ici: MyProgram.app/Content/MacOS/MyProgram.exe
Mon dossier ressource vit ici: MyProgram.app/Content/Resources /
Dans mon code, j'utilise un chemin relatif pour référencer des éléments dans le dossier des ressources:
"../ Ressources / something.png"
Cela fonctionne très bien si j'ouvre le paquet .app et exécutez le .exe directement.
Mais ce n'est pas comment le faisceau de .app est censé fonctionner. L'utilisateur est censé cliquer sur le paquet .app dans le Finder pour exécuter le programme. Mais dans ce cas, mon chemin relatif ne fonctionne plus, et ce que je ne comprends pas.
Quelqu'un comprend mon problème et comment je peux résoudre ce problème?
La solution
QApplication::applicationDirPath()
http://doc.qt.io/qt-5/qcoreapplication .html # applicationDirPath
Autres conseils
Nous utilisons:
QDir
CoreDir::bundle()
{
// Trolltech provided example
CFURLRef appUrlRef = CFBundleCopyBundleURL( CFBundleGetMainBundle() );
CFStringRef macPath = CFURLCopyFileSystemPath( appUrlRef, kCFURLPOSIXPathStyle );
QString path = CFStringToQString( macPath );
CFRelease(appUrlRef);
CFRelease(macPath);
return QDir( path );
}
filePath ( "../Resources") faire CoreDir :: bundle ();.
Lorsque vous compilez votre produit, vous avez votre essayé de placer le chemin de Resources
être parent? Dans le cas contraire, vous pouvez récupérer le faisceau principal, l'URL de l'application de celle-ci et l'ajouter à l'URL des ressources.
Il y a un manuel pour tout, il semble:)