1、QT跨平台的原理
QT跨平台起始并不神奇,qt在不同操作系统下都实现有不同的底层类库,然后再暴露出一个公共的应用层接口,我们做的开发就是基于这个公共的应用层接口来完成。所谓的跨平台是指基于qt写的代码是跨平台,而不是编译出来的文件跨平台,同一份代码需要放到另一个平台上时,需要用另一个平台的类库重新编译。
看一下QT的源代码就明白了。
通过仔细阅读源代码你就知道,所谓跨平台,就是在不同的平台下编译不同的源代码,只是借口一样罢了。
2、简单的实例
//CrossPlatform.h
#ifndef CROSSPLATFORM_H
#define CROSSPLATFORM_H
extern void CrossPlatformfun();
#endif // CROSSPLATFORM_H
#include "CrossPlatform.h"
#include <stdio.h>
void CrossPlatformfun()
{
printf("Linux\n");
}
//CrossPlatform_win.cpp
#include "CrossPlatform.h"
#include <stdio.h>
void CrossPlatformfun()
{
printf("windows\n");
}
//main.cpp
#include <QCoreApplication>
#include "CrossPlatform.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CrossPlatformfun();
return a.exec();
}
//pro文件
QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
HEADERS += CrossPlatform.h
SOURCES += main.cpp
win32 {
SOURCES += CrossPlatform_win.cpp
}else {
SOURCES += CrossPlatform_unix.cpp
}
运行结果:
相同的接口,都是void CrossPlatformfun(),通过pro文件配置,windows系统下包含CrossPlatform_win.cpp,linux系统下包含CrossPlatform_unix.cpp,这样达到跨平台的目的。
当然这只是一个简单的例子,QT的实现肯定复杂的多,但是基本的原理是一样的。