Qt on Mac 开发之 读取苹果系统OSX上的plist资源文件

版权声明:本文为博主原创文章,未经博主允许不得转载。作者:沙师弟专栏 https://blog.csdn.net/u014597198/article/details/86141395

1、整体流程

1、先在X-Code上创建.h和.mm文件,并写出主要读取资源文件函数和接口
2、把.h和.mm文件添加到Qt中,并写出C++间接调用接口
3、把界面和调用读取plist资源文件接口联系起来

对于MAC上的应用软件的信息读取,一般是对于该应用程序的info.plist的解析。

2、解析方法

a、采用QT的Dom接口进行解析

就是把苹果的info.plist文件当成xml文件来解析,具体解析和解析XML方式一致,很简单,这里就不啰嗦了。

b、采用Object-C读取,然后通过C++来调用

第二种也比较容易,但是存在OC知识的陌生性,下面我们来一起进入第二种方法的解析吧。(说到要用Object-C,不得不提.mm文件和.m文件的差异性,这里我们用.mm文件。.mm文件除了可以包含Objective-C和C代码以外还可以包含C++代码,而.m文件只能包含Objective-C和C代码。这里我们要用到.mm文件,.mm文件可以直接用苹果电脑的X-Code开发平台生成,头文件还是.h。)

完成接口的话如图:
在这里插入图片描述

3、源码

现将如图.mm文件代码公布如下:

#include "readDeviceInfo.h"
#include <QDebug>
#import <Foundation/Foundation.h>
#import <iostream>
#ifdef Q_OS_OSX
#import <Cocoa/Cocoa.h>
#endif

#import <GLKit/GLKit.h>
ReadDeviceInfo::ReadDeviceInfo()
{
}

QString ReadDeviceInfo::getAppNameStr()
{
    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleExecutableKey]; //获取项目名称
    return QString::fromNSString(executableFile);
}

QString ReadDeviceInfo::getAppPublicVersion()
{
    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleInfoDictionaryVersionKey]; //获取外部版本
    return QString::fromNSString(executableFile);
}

QString ReadDeviceInfo::getAppPrivateVersion()
{
    NSString *executableFile = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey]; //获取内部版本
    //NSString *executableFile = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"CFBundleVersion"];
    return QString::fromNSString(executableFile);
}

以上是苹果提供的最常用的三个接口,
还有其它比较常见的接口:

const CFStringRef kCFBundleInfoDictionaryVersionKey;
const CFStringRef kCFBundleExecutableKey;
const CFStringRef kCFBundleIdentifierKey;
const CFStringRef kCFBundleVersionKey;
const CFStringRef kCFBundleDevelopmentRegionKey;
const CFStringRef kCFBundleNameKey;
const CFStringRef kCFBundleLocalizationsKey;

4、实例

读plist:

void Widget::read()
{
    QString  plistPath = QDir::homePath() + "/Library/Preferences/com.xx.plist";
    QSettings readReg(plistPath, QSettings::NativeFormat);
    QString email = readReg.value("email", QVariant()).toString();
    qDebug() << "email=========" << email;
}

写plist:

void Widget::write()
{
    QString  plistPath = QDir::homePath() + "/Library/Preferences/com.xx.plist";
    QSettings writeReg(plistPath, QSettings::NativeFormat);
    writeReg.setValue("Mac", "10.10.4");
}

com.xx.plist文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Mac</key>
        <string>10.10.4</string>
        <key>email</key>
        <string>ghdfgdf</string>
</dict>
</plist>

猜你喜欢

转载自blog.csdn.net/u014597198/article/details/86141395