在Windows上设置Qt可执行文件中的应用程序信息

44

有没有关于通过Qt设置应用程序信息(比如右键点击.exe->属性)的技巧?

我可以在Qt资源文件(qrc)中添加任意版本字符串并显示它们。 但是大多数Windows安装程序会检查版本号,除了手动维护单独的.RC文件外,我找不到设置这些字段的Qt方式。

最好还有一种方式可以从自动构建中更新这些信息!

2个回答

70

这是我的做法...在你的项目中添加一个名为resources.rc的文件,并将以下内容添加到其中:

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

还有一个名为version.h的文件,其内容如下:

#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

最后,在您的.pro文件中添加:RC_FILE = resources.rc。非Windows平台将忽略该值,因此无需在其前面加上win32:

谢谢,这仍然在维护一个单独的rc文件。最后我做了这样的事情,我的Python构建脚本只是像这样写RC文件。 - Martin Beckett
1
这对我没有用 添加所有这些代码到资源文件中,什么也没有改变。 - user451498
它工作得很好。请确保包含您RC文件的路径。#Windows RC文件 RC_FILE = $$ PWD / resources / resources.rc - Ed of the Mountain
2
你在 resources.rc 文件中使用的语法文档在哪里? - Jack
@Jack:文档在这里:https://msdn.microsoft.com/zh-cn/library/windows/desktop/aa381058(v=vs.85).aspx - Michael Franzl
我按照你说的做了,但什么也没改变(版本仍然是0.0.0.0)。 - Donald Duck

59

好的,两年过去了,但也许有人会觉得它有用...

尝试使用以下qmake变量:

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

更多信息在这里


1
谢谢,我还没有测试过,因为我在VS中工作,但更多的答案总是好的。 - Martin Beckett
1
有没有办法在运行时使用一些代码获取VERSION - Niklas
1
请在此处查看APP_VERSION宏:http://www.openguru.com/2009/11/qt-best-way-to-set-application-version.html - parsley72

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接