Ho qualche dubbio forse su ciò che intendi con librerie native e non.
"solo per le operazioni base" suggerisce che la maggior parte delle
operazioni usano librerie non native, quindi (non credo tu stia
parlando delle librerie standard C/C++), per esclusione, se non stiamo
parlando di assembly, visto che nei sorgenti delle Qt non ce n'è traccia,
di cosa stiamo parlando? I sorgenti Qt fanno uso di un sistema di
ereditarietà fittissimo, tutto basato su libreria standard e librerie
native. Tutte queste classi ereditate da classi vengono prefissate da
"qt_" oppure "Qt". Nelle cartelle dedicate alle QtCore infatti vedi
innanzi tutto l'#include <unistd.h> e vedi anche, in "qtmain_win.cpp",
questo frammento che parla da sè:
(da /qt-everywhere-opensource-src-5.0.2/qtbase/src/winmain/qtmain_win.cpp)
/*
WinMain() - Initializes Windows and calls user's startup function main().
NOTE: WinMain() won't be called if the application was linked as a
"console"
application.
*/
#ifdef Q_OS_WINCE
int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance,
LPWSTR /*wCmdParam*/, int cmdShow)
#else
extern "C"
int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance,
LPSTR /*cmdParamarg*/, int cmdShow)
#endif
dove WinMain è il cuore del motore gui di win32. Questo stesso sorgente
importa l'header "qt_windows.h"
(/qt-everywhere-opensource-src-5.0.2/qtbase/src/corelib/global/qt_windows.h)
che ha l' "infausto" compito di includere tutto ciò che interessa alle
win32: <windows.h>. Tutto il resto, il sistema signal-slot, il paradigma
model-viewer, il multithreading, e a maggior ragione tutto ciò che è
a livello più alto, si rifà esattamente a classi che ereditano metodi
che usano le librerie native. Ciò che non è nativo, e non è assembly, è:
libreria standard (che spesso è anche implementata con librerie native,
ma non è questo oggetto di discussione perchè qui si parla di grafica e
l'interfaccia tra drivers e display avviene tramite chiamate di sistema,
quindi librerie native), oppure è un wrapper di funzioni native. Forse è
meno diretto l'uso che Qt fa di win32, ma il punto di partenza è sempre
quello. Non c'è altro modo altrimenti di visualizzare GUI sullo schermo
(se non tramite routine in assembly che parlino direttamente al framebuffer
della scheda video e alla ram video).
Ciao : )
--
Vincenzo Mercuri