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的實現肯定複雜的多,但是基本的原理是一樣的。