RC_FILE 使用 MingW 时无法使用 QCoreApplication::applicationVersion



我创建了一个简单的 rc 文件并放入.pro

  • rcexample.rc

    #include "winver.h"
    VS_VERSION_INFO VERSIONINFO
        FILEVERSION 1,0,0,1
        PRODUCTVERSION 1,0,0,1
        FILEFLAGS 0x0L
        FILEFLAGSMASK 0x3fL
        FILEOS 0x00040004L
        FILETYPE 0x1L
        FILESUBTYPE 0x0L
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "000004b0"
            BEGIN
                VALUE "CompanyName", "Foo Bar CompanyName"
                VALUE "FileDescription", "Foo bar FileDescription"
                VALUE "FileVersion", "1.0.0.1"
                VALUE "LegalCopyright", "Foo bar LegalCopyright"
                VALUE "InternalName", "foobar"
                VALUE "OriginalFilename", "foobar.exe"
                VALUE "ProductName", "foobar product name"
                VALUE "ProductVersion", "1.0.0.1"
            END
        END
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x0, 1200
        END
    END
    
  • winvertest.pro

    QT += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = winvertest
    TEMPLATE = app
    win32:RC_FILE = rcexample.rc # my rc file
    DEFINES += QT_DEPRECATED_WARNINGS
    SOURCES += main.cpp
    
  • main.cpp

    #include <QDebug>
    #include <QApplication>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        qDebug() << "applicationVersion:" << a.applicationVersion();
        return a.exec();
    }
    

使用 32 位MSVC2015,applicationVersion 返回:

应用程序版本:"1.0.0.1"

但是使用 Mingw 5.3.0 返回空:

应用程序版本: "

这是 Mingw 问题还是 Qt 问题,还是我忘记向"专业版"添加一些东西?

您可能应该在其他地方定义版本号,并在 .rc 文件中使用这些定义。我为此使用了一个头文件,src/appversion.h ,它包含:

#define MY_APP_VERSION "1.1.0"
/* MS Windows executable resource versions. */
#define W32_RC_FILEVERSION 1,1,0,00
#define W32_RC_PRODUCTVERSION 1,1,0,00

然后,我在 .rc 文件中使用这些定义:

#include "src/appversion.h"
/* ... */
FILEVERSION W32_RC_FILEVERSION
PRODUCTVERSION W32_RC_PRODUCTVERSION
FILEFLAGSMASK 0x3fL
/* ... */
VALUE "FileVersion", MY_APP_VERSION
/* ... */

然后,在实例化 QApplication 后,我设置如下值:

a.setApplicationName(QString::fromLatin1("My App"));
a.setApplicationVersion(QString::fromLatin1(MY_APP_VERSION));

相关内容

  • 没有找到相关文章

最新更新