[Development] QStandardPaths could be helpful for cross platform portability, Qt Everywhere

Tor Arne Vestbø tor.arne.vestbo at digia.com
Wed Feb 25 12:31:17 CET 2015

Thanks for the write up Jeremy,

On 24/02/15 07:24, Jeremy Whiting wrote:
> QStandardPaths is useful to give paths to various places that are common
> to all platforms. ConfigLocation tells where configurations should be
> stored or read from, GenericDataLocation is where data should be,
> AppDataLocation is where application specific location should be, etc.

> This works fairly well except where assumptions are made as to where
> data, configurations, applications, etc. are installed based on one
> platform. For example applications written with Linux as a target can
> assume that GenericDataLocation will include /usr/share/ and that
> ConfigLocation will include ~/.config, then expect those to "just work"
> when the code is built on other platforms.

Just to clarify, as the wording of this paragraph was a bit funky: any 
assumption about what QStandardPaths returns is bound to fail when 
targeting multiple platforms, so "applications written with Linux as a 
target" can and should _not_ assume anything about the paths, and will 
fail on non Linux platforms if they do. I think that's what you're 
saying as well, I just read it a bit weird the first time around :)

> One possible solution to this for app bundles on OS X is to include the
> data files any application needs inside the .app itself. The problem
> with that is that QStandardPaths doesn't look for files inside the .app
> bundle so if we included icons, data files, etc. in addition to
> libraries and application icon resources the library code that uses
> QStandardPaths unmodified to find these files would still fail. The same
> argument could be used for relative paths on Windows.

This should be fixed for OS X (and iOS). ~/Library/Application Support 
can be used for installed application data, but is most typically used 
for generated application data that is not directly user documents 
(which should live in ~/Documents), so the app bundle should be one of 
the paths returned by QStandardPaths.

> One use case for the above problem are applications that use data files
> from their own project and also files from other projects. kdoctools
> meinproc5 executable is one use case. It uses QStandardPaths to locate
> the xsl stylesheets required to create documentation. These stylesheets
> come from kdoctools and also kdelibs4support. These two separate
> projects could be modified to put their files into /Library/Application
> Support on OS X so QStandardPaths can find them. This is a tool used by
> developers, not end users, so installing here shouldn't be a problem.

This is the correct approach. Cross platform deployment (installing 
files into /usr/share on Linux and ~/Library/Application Support on OS 
X) + cross platform runtime lookup through QStandardPaths. Qt is lacking 
on providing the former, but that doesn't mean it's not the right approach.

> Another use case are data files used by multiple applications. These are
> stored and safely looked up via QStandardPaths on Linux/Unix in
> /usr/share followed by some application or data type prefix and the data
> files themselves.

The OS X equivalent is to install the shared data files into 
~/Library/Application Support/<someprefix> and look them up using 

> Proposed and considered solutions:

None of these seem needed if you install the data to the right location 
on the given platform?

> Obviously some changes will be required to any software that has made
> the above mentioned assumptions about QStandardPaths build systems


> if we could also improve QStandardPaths itself in one of the above
> mentioned solutions that could possibly help make it easier to port
> applications and libraries from one of Qt's platforms to another.

We should put effort into improving how Qt helps out with the cross 
platform deployment/installation phase, not into assuming the deployment 
is the same on all platforms and working around it in the runtime lookup 

Tor Arne

More information about the Development mailing list