RC_FILE 在使用 MingW 时不与 QCoreApplication::applicationVersion 一起工作
RC_FILE don't work with QCoreApplication::applicationVersion when using MingW
我创建了一个简单的 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();
}
使用MSVC2015 32位, applicationVersion
returns:
applicationVersion: "1.0.0.1"
但使用 Mingw 5.3.0 returns 空:
applicationVersion: ""
这是 Mingw 问题还是 Qt 问题,还是我忘记向 "pro" 添加内容?
您或许应该在其他地方定义您的版本号,并在 .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));
我创建了一个简单的 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(); }
使用MSVC2015 32位, applicationVersion
returns:
applicationVersion: "1.0.0.1"
但使用 Mingw 5.3.0 returns 空:
applicationVersion: ""
这是 Mingw 问题还是 Qt 问题,还是我忘记向 "pro" 添加内容?
您或许应该在其他地方定义您的版本号,并在 .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));