我创建了一个简单的 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));