QT的跨平臺開發問題(4)跨平臺的原理

1、QT跨平臺的原理

QT跨平臺起始並不神奇,qt在不同操作系統下都實現有不同的底層類庫,然後再暴露出一個公共的應用層接口,我們做的開發就是基於這個公共的應用層接口來完成。所謂的跨平臺是指基於qt寫的代碼是跨平臺,而不是編譯出來的文件跨平臺,同一份代碼需要放到另一個平臺上時,需要用另一個平臺的類庫重新編譯。

看一下QT的源代碼就明白了。

通過仔細閱讀源代碼你就知道,所謂跨平臺,就是在不同的平臺下編譯不同的源代碼,只是藉口一樣罷了。

2、簡單的實例

//CrossPlatform.h

#ifndef CROSSPLATFORM_H
#define CROSSPLATFORM_H
extern void CrossPlatformfun();
#endif // CROSSPLATFORM_H

//CrossPlatform_unix.cpp

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章