1 windows中获取执行文件exe的版本号
 

QString GetFileVertion(QString aFullName)

{

QString vRetVersion;

string vFullName = QStringToString(aFullName);

char vVersion[256] = {0};

DWORD vHandle = 0;

DWORD vInfoSize = 0;

vInfoSize = ::GetFileVersionInfoSize(vFullName.c_str(), &vHandle);

if(vInfoSize <= 0)

{

return false;

}

char *pData = new char[vInfoSize + 1];

memset(pData, 0, vInfoSize + 1);

if(!::GetFileVersionInfo(vFullName.c_str(), NULL, vInfoSize, pData))

{

if(pData)

{

delete pData;

}

return   FALSE;

}

string vTempStr = "\\";

VS_FIXEDFILEINFO *pFileInfo;

unsigned int vUInfoSize = 0;

if(!::VerQueryValue(pData, vTempStr.c_str(), (void**)&pFileInfo, &vUInfoSize))

{

if(pData)

{

delete pData;

}

return false;

}

WORD vVer[4];

vVer[0] = HIWORD(pFileInfo->dwProductVersionMS);

vVer[1] = LOWORD(pFileInfo->dwProductVersionMS);

vVer[2] = HIWORD(pFileInfo->dwProductVersionLS);

vVer[3] = LOWORD(pFileInfo->dwProductVersionLS);

sprintf(vVersion, "%d.%d.%d.%d", vVer[0], vVer[1], vVer[2], vVer[3]);

if(pData)

{

delete pData;

}

string vVerStr = vVersion;

vRetVersion = StringToQString(vVerStr);

return vRetVersion;

}
 
2 Mac Os中获取执行文件app的版本号
 
Mac Os 获取执行文件app的版本号需要从Info.plist文件中获取,
Info.plist文件为XML格式 类似如下:
 
http://www.apple.com/DTDs/PropertyList-1.0.dtd">

CFBundleExecutable
 VxActuator
 CFBundleGetInfoString
 Created by Qt/QMake
 CFBundleIconFile
 
 CFBundleIdentifier
 com.yourcompany.VxActuator
 CFBundlePackageType
 APPL
 CFBundleSignature
 ????
 CFBundleVersion
 V0.8.0.001
 NOTE
 This file was generated by Qt/QMake.

其中以下为文件版本信息
 CFBundleVersion
 V0.8.0.001
注意: 如无以上信息,请在工程里设置 Version 项
 

QString GetFileVertion(QString aFullName)

{

QString vRetVersion;

QString vFullName = aFullName + "/Contents/Info.plist";

if (!VxIsFileExist(vFullName))

{

return "";

}

QFile vXmlFile(vFullName);

if (!vXmlFile.open(QIODevice::ReadOnly))

{

vXmlFile.close();

return "";

}

QTextStream vReadStream(&vXmlFile);

QTextCodec *vCodec = QTextCodec::codecForName("UTF-8");

vReadStream.setCodec(vCodec);

QString vXmlDataStr = vReadStream.readAll();

vXmlFile.close();

QDomDocument vXmlDoc;

if (!vXmlDoc.setContent(vXmlDataStr))

{

return "";

}

QDomElement vXmlRoot = vXmlDoc.documentElement();

if (QString::compare(vXmlRoot.tagName(), "plist", Qt::CaseInsensitive) != 0)

{

return "";

}

QDomNode vDictNode = vXmlRoot.namedItem("dict");

if (vDictNode.isNull())

{

return "";

}

QDomElement vDictElement = vDictNode.toElement();

QDomNode vChildNode = vDictElement.firstChild();

while(!vChildNode.isNull())

{

QDomElement vChildElement = vChildNode.toElement();

if(QString::compare(vChildElement.tagName(), "key", Qt::CaseInsensitive) == 0)

{

if(QString::compare(vChildElement.text(), "CFBundleVersion", Qt::CaseInsensitive) == 0)

{

vChildNode = vChildNode.nextSibling();

vRetVersion = vChildNode.toElement().text();

break;

}

}

vChildNode = vChildNode.nextSibling();

}

return vRetVersion;

}

http://blog.chinaunix.net/uid-20718335-id-2975923.html

 

Qt在windows与Mac OS中获取执行程序版本号的更多相关文章

  1. 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。

    写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...

  2. 操作系统Unix、Windows、Mac OS、Linux的故事

    电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...

  3. Unix、Windows、Mac OS、Linux系统故事

    我们熟知的操作系统大概都是windows系列,近年来Apple的成功,让MacOS也逐渐走进普通用户.在服务器领域,恐怕Linux是无人不知无人不晓.他们都是操作系统,也在自己的领域里独领风骚.这都还 ...

  4. Linux最终将会领先于Windows、Mac OS!

    Linux最终将会领先于Windows.Mac OS! 众所周知,硬件离开了软件就像人失去灵魂,而操作系统作为软件中的基础部分,更是重中之重!无论手机.电脑.还是服务器一旦离开了操作系统,比之一堆废铁 ...

  5. [转]操作系统Unix、Windows、Mac OS、Linux的故事

    [写得很江湖气,可惜找不到原作者了] 文章转自:http://blog.csdn.net/wenmingchan/article/details/49925379 http://www.jb51.ne ...

  6. 【转】操作系统Unix、Windows、Mac OS、Linux的故事

    电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...

  7. VMware Mac OS中无法找到适应的分辨率的解决办法

    使用VMware安装的Mac OS中,有时在显示器的分辨率中的选择项里面,没有对应显示的分辨率可供选择的时候(无法自适应),可以在虚拟机设置里,显示器中修改强制分辨率.修改过后重启虚拟机,就可以有对应 ...

  8. mac os中的一些快捷键使用及基础软件安装

    mac os中terminal标签页的切换 Command+Shift+{} { 切换到左边的标签页 }  切换到右边的标签页 普通键盘对应于mac下的按键: CTRL->CONTROL WIN ...

  9. MAC OS 中mount nfs 报错问题.

    记一下 MAC OS 中mount nfs 报错问题. 环境和配置文件 NFS 服务端 Ubuntu 安装 apt install nfs-kernel-server 服务端的配置文件 cat /et ...

随机推荐

  1. mysql触发器使用注意

    1.在创建触发器的时候,语句中避免在一个select语句查询多个列,例如使用select a,b from table,应该分开使用select语句, 例如select a from table  s ...

  2. linux杂记(三)linux指令介绍

    [root@linux ~]# command [-options] parameter1 parameter2 说明: 最左边的root显示的是[目前使用者的账号],而@之后接的是linux即[主机 ...

  3. WebUploader IE9下报错

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在项目中,推荐并一直在使用WebUploader进行文件上传业务开发. ...

  4. asp.net mvc 不找其他view模板,只找cshtml

    asp.net mvc 默认找view文件时,依次找后辍名为aspx.ascx.cshtml.vbhtml的view文件.但是项目住住用C#+Razor开发,这样找,岂不有性能损失. 添加以下代码: ...

  5. J2SE知识点摘记-数据库(一)

    一.          数据库连接 在JDBC的操作过程中,进行数据库连接的主要步骤如下: 通过Class.forName()加载数据库的驱动程序.首先需要利用来自Class类中的静态方法forNam ...

  6. In-System Debugger for 8051 Devices(ISD 8051单片机在线调试器)

    此文档包含了最新版本的说明及最近的更新特别是对 ISD51 的说明(用户手册没有此说明) Keil Software,Inc and Keil Elektronik GmbH保留所有此文件中涉及的信息 ...

  7. C语言入门(4)——常量、变量与赋值

    对于基本数据类型量,按其取值是否可改变又分为常量和变量两种.在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量.它们可与数据类型结合起来分类. 常量 常量有字符常量(Character ...

  8. 详解Spring中的CharacterEncodingFilter--forceEncoding为true在java代码中设置失效--html设置编码无效

    在项目中有很多让人头疼的问题,其中,编码问题位列其一,那么在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?下面我们来看看Spring框架给我们提供过滤器CharacterEncodin ...

  9. ios webview 加载含有中文的URL网页显示白屏

    1. ios中的webview加载的URL不可以含有中文,解决办法说将中文字符转码, 如下: - (NSString *)URLEncodeString { NSCharacterSet *set = ...

  10. error while loading shared libraries: libevent-1.x.so.1

    安装完memcache后启动报错(error while loading shared libraries: libevent-1.x.so.1) 这是由于64位linux会去/usr/lib64目录 ...