You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt iOS开发:获取iPad设备型号、序列号等硬件信息

在iPad上用Qt获取设备信息的实现方案

可以实现这些设备信息的获取,但由于Qt跨平台API对iOS硬件细节的支持有限,部分信息需要结合iOS原生API与Qt的Objective-C++混编来完成,以下是具体实现方式:

核心信息获取

序列号

Qt无直接API,需调用iOS原生UIDevice接口实现,代码示例(需放在.mm文件中):

#include <QString>
#import <UIKit/UIKit.h>

QString getSerialNumber() {
    NSString *serialStr = [[UIDevice currentDevice] valueForKey:@"serialNumber"];
    return QString::fromNSString(serialStr);
}

注意:iOS 10+后获取序列号需要开发者账号权限,调试时需确保项目配置中开启相关权限,上架App Store时需符合苹果权限审核要求。

型号

  • Qt原生API可获取设备型号标识(如iPad11,6):
#include <QSysInfo>
#include <QString>

QString getDeviceType() {
    return QSysInfo::productType();
}
  • 如需友好型号名称(如iPad Air 4),可结合iOS原生API:
#include <QString>
#import <UIKit/UIKit.h>

QString getFriendlyDeviceModel() {
    NSString *modelStr = [[UIDevice currentDevice] model];
    return QString::fromNSString(modelStr);
}

扩展信息获取

存储容量

通过iOSNSFileManager获取总容量与可用容量:

#include <QString>
#import <Foundation/Foundation.h>

// 获取总存储容量(字节)
qint64 getTotalStorageBytes() {
    NSFileManager *fm = [NSFileManager defaultManager];
    NSDictionary *fsAttrs = [fm attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
    return [fsAttrs[NSFileSystemSize] longLongValue];
}

// 获取可用存储容量(字节)
qint64 getAvailableStorageBytes() {
    NSFileManager *fm = [NSFileManager defaultManager];
    NSDictionary *fsAttrs = [fm attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
    return [fsAttrs[NSFileSystemFreeSize] longLongValue];
}

处理器型号

通过sysctl调用获取CPU型号:

#include <QString>
#include <sys/sysctl.h>

QString getProcessorModel() {
    size_t bufferSize = 0;
    // 先获取所需缓冲区大小
    sysctlbyname("machdep.cpu.brand_string", NULL, &bufferSize, NULL, 0);
    char *modelBuffer = static_cast<char*>(malloc(bufferSize));
    sysctlbyname("machdep.cpu.brand_string", modelBuffer, &bufferSize, NULL, 0);
    QString cpuModel = QString::fromUtf8(modelBuffer);
    free(modelBuffer);
    return cpuModel;
}

可用内存大小

通过mach内核接口获取可用内存:

#include <mach/mach.h>

// 获取可用内存(字节)
qint64 getAvailableMemoryBytes() {
    mach_port_t hostPort = mach_host_self();
    mach_msg_type_number_t infoCount = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    vm_statistics_data_t vmStats;

    if (host_statistics(hostPort, HOST_VM_INFO, reinterpret_cast<host_info_t>(&vmStats), &infoCount) != KERN_SUCCESS) {
        return -1;
    }

    natural_t pageSize = vm_page_size;
    // 空闲页 + 可回收页 = 可用内存
    qint64 availableMem = (vmStats.free_count + vmStats.inactive_count) * static_cast<qint64>(pageSize);
    return availableMem;
}

注意事项

  • 所有调用iOS原生API的代码需放在.mm文件(Objective-C++)中,或在.cpp文件中通过Objective-C Runtime间接调用。
  • 部分API的使用需符合苹果的隐私与权限规则,避免上架审核被拒。
  • Qt的QSysInfo仅能提供基础跨平台信息,iOS硬件细节需依赖原生API保证准确性。

内容的提问来源于stack exchange,提问作者aarelovich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:48:22