赞
踩
我们在使用QT编程的时候,有时会遇到跨平台的状况(毕竟QT本身就是因优秀的跨平台特性而出名),在这种情况下,判断当前是哪一种平台就非常必要了,这里介绍一下QT提供的各种判断操作系统和编译平台的做法:
1、如果仅仅想要当前是windows、mac还是linux系统的话,可以直接使用宏:
Q_OS_LINUX:定义在linux系统中
Q_OS_WIN:定义在windows系统中
Q_OS_OSX:定义在OS X系统中
2、如果还想更细致的判断系统,比如当前是windows 32位系统还是64位系统,是IOS系统还是Android系统,又或者当前是否在ARM环境中?当然也是可以的:
Q_OS_WIN64:定义在windows 64位系统中
Q_OS_IOS:定义在IOS系统中
Q_OS_ANDROID:定义在Android系统中
Q_PROCESSOR_ARM:是否为ARM处理器编译环境
3、如果还不满意,比如我想知道当前的windows系统是winXP、win7、还是win10,那肯定也是有的,不过这就不在预编译里面判断了,需要在代码中进行判断,相对于普通的C++,QT封装了很多好用的类,有些类可以帮助我们更快速更方便的使用C++,比如QString类,从此妈妈再也不用担心我不会用std::string,又比如QSysInfo类,看名字就知道这个类和系统信息有关,而我们用来识别操作系统就是用这个类进行判断的。首先看看QT文档中的介绍:
翻译:
QSysInfo类提供有关系统的信息。
WordSize:判断编译应用程序的平台的指针大小(注:不同操作系统和编译环境下指针大小不同)。
ByteOrder:判断当前平台是大端还是小端。
WindowsVersion:判断运行应用程序的Windows操作系统的版本。
MacintoshVersion:判断运行应用程序的Macintosh操作系统的版本。
某些常量仅在指定平台上定义。 您可以使用预处理器符号Q_OS_WIN和Q_OS_OSX来测试应用程序当前是在Windows还是OS X下编译。
看完上面的介绍大概就清楚了,利用QSysInfo可以得到各种操作系统的信息,比如,我最近想要将一个软件放在windows XP中运行,其中有一个dll库仅支持windows7及以上的windows版本,那么可以在代码中这样判断:
- if(QSysInfo::windowsVersion() == QSysInfo::WV_XP) {
- QMessageBox msgBox;
- msgBox.setText(QStringLiteral("产品暂不支持windows XP操作系统"));
- msgBox.exec();
- return false;
- }
这样就很方便的将不支持XP系统的功能避开,避免出现类似于【无法定位程序输入点XXX于动态链接库KERNEL32.dll上】这样的问题。(如下图)
同学们如果遇到上述的问题,也可以看看是否有因为库文件不支持或者是库文件不对造成的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。