2010-05-06 1 views
32

Quelqu'un a-t-il un conseil pour définir les informations de l'application (par exemple, un clic droit sur les propriétés .exe->) à partir de Qt?Définition des informations d'application dans un fichier exécutable Qt sous Windows

Je peux ajouter des chaînes de version arbitraires au fichier de ressources Qt (qrc) et les afficher. Mais la plupart des installateurs Windows vérifient le numéro de version et je ne peux pas trouver un moyen Qt de définir ces champs autrement que manuellement en conservant un fichier .RC séparé

Une façon de mettre à jour ceci à partir d'une compilation automatisée serait également intéressante !

Répondre

55

Voilà comment je le fais ... ajouter un fichier appelé resources.rc à votre projet avec le contenu:

IDI_ICON1 ICON DISCARDABLE "res/app.ico" 

#include <windows.h> 
#include "version.h" 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION  VER_FILEVERSION 
PRODUCTVERSION VER_PRODUCTVERSION 
BEGIN 
    BLOCK "StringFileInfo" 
    BEGIN 
     BLOCK "040904E4" 
     BEGIN 
      VALUE "CompanyName",  VER_COMPANYNAME_STR 
      VALUE "FileDescription", VER_FILEDESCRIPTION_STR 
      VALUE "FileVersion",  VER_FILEVERSION_STR 
      VALUE "InternalName",  VER_INTERNALNAME_STR 
      VALUE "LegalCopyright",  VER_LEGALCOPYRIGHT_STR 
      VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR 
      VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR 
      VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR 
      VALUE "ProductName",  VER_PRODUCTNAME_STR 
      VALUE "ProductVersion",  VER_PRODUCTVERSION_STR 
     END 
    END 

    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x409, 1252 
    END 
END 

et un fichier appelé version.h avec le contenu:

#ifndef VERSION_H 
#define VERSION_H 

#define VER_FILEVERSION    1,0,0,0 
#define VER_FILEVERSION_STR   "1.0.0.0\0" 

#define VER_PRODUCTVERSION   1,0,0,0 
#define VER_PRODUCTVERSION_STR  "1.0\0" 

#define VER_COMPANYNAME_STR   "Your Organization" 
#define VER_FILEDESCRIPTION_STR  "CoolApplication" 
#define VER_INTERNALNAME_STR  "CoolApplication" 
#define VER_LEGALCOPYRIGHT_STR  "Copyright © 2010 Your Organization" 
#define VER_LEGALTRADEMARKS1_STR "All Rights Reserved" 
#define VER_LEGALTRADEMARKS2_STR VER_LEGALTRADEMARKS1_STR 
#define VER_ORIGINALFILENAME_STR "coolapplication.exe" 
#define VER_PRODUCTNAME_STR   "CoolApplication" 

#define VER_COMPANYDOMAIN_STR  "example.org" 

#endif // VERSION_H 

et enfin à votre fichier .pro, ajoutez: RC_FILE = resources.rc. Les plates-formes non-Windows ignorent la valeur, vous n'avez donc pas besoin de le préfixer avec win32:.

+0

Merci - cela maintient toujours un fichier rc séparé. J'ai fini par faire quelque chose où mon script de construction python vient d'écrire un fichier RC comme celui-ci. –

+1

cela n'a pas fonctionné pour moi rien n'a changé avec tout ce code ajouté au fichier de ressources –

+0

Cela fonctionne très bien. Assurez-vous d'inclure tous les chemins d'accès à votre fichier RC. # Fichier RC Windows RC_FILE = $$ PWD/resources/resources.rc –

36

D'accord, deux ans après avoir été demandé ... mais peut-être quelqu'un trouvera utile ...

Essayez d'utiliser les variables suivantes qmake:

VERSION = 0.4.0.1 
QMAKE_TARGET_COMPANY = company 
QMAKE_TARGET_PRODUCT = product 
QMAKE_TARGET_DESCRIPTION = description 
QMAKE_TARGET_COPYRIGHT = copyright 

Plus d'info here.

+1

Merci, je ne l'ai pas testé parce que je travaille dans VS, mais plus de réponses sont toujours bonnes –

+1

Est-il possible d'obtenir 'VERSION' à l'exécution avec un morceau de code? – Niklas

+1

Voir la macro APP_VERSION ici: http://www.openguru.com/2009/11/qt-best-way-to-set-application-version.html – parsley72

Questions connexes