QT中嵌入SDL


原地址:http://www.qtcn.org/bbs/read.php?tid=23926

前段時間在做一個音視頻編碼板卡的PC跨平台程序,使用QT框架,其中有塊功能是往QT里嵌入SDL,來播放YUV格式幀數據,現在已經在windows和linux下完成。
我瀏覽論壇的時候,發現好多同僚在做我以前的准備工作。在這里我把我的一些經驗寫出來,希望對這些同僚有點幫助,當然可能有有一些錯誤,請指出來,大家一起進步。
一.
yay-20060421-2.zip這個包是一個使用SDL的YUV的播放器源代碼,在Linux下可用。
二.
至於往QT里嵌入SDL,你可以這樣
這個是.pro文件部分代碼:
unix { 
-lSDL \

-lSDLmain 

}

win32 { 

LIBS += -L./lib/Win32Lib \

-lSDL \

-lSDLmain 

}

Windows下的SDL庫文件有3個sdl.lib, SDLmain.lib 和sdl.dll。將sdl.lib,SDLmain.lib 放在./lib/Win32Lib目錄下,

講sdl.dll跟你的執行文件放在一起。

Linux下一般都為幫你安裝好SDL,如果沒安裝還沒關系,下一個,配置下環境變量。Linux下的SDL靜態庫為libSDL.a和libSDLmain.a。

三.SDL實現代碼,參考yay-20060421-2.zip 里面的代碼就行。往QT里嵌入SDL的代碼其實很惡心,也最重要!在初始化的時候加上這么一段代碼:

/*set sdl env*/
char variable[64];

#ifdef Q_OS_WIN
sprintf(variable, "SDL_WINDOWID=0x%lx", frame_pre->winId());
#else
sprintf(variable, "SDL_WINDOWID=0x%lx", this->winId());
#endif

putenv(variable);

把QT的窗口句柄的winId值,賦給SDL的環境變量就可以了,但這在windows下和linux下有點區別,frame_pre為MainWindow下的一個frame。你不能將MainWindow的句柄賦給SDL,但在Linux下,你又必須把MainWindow的句柄賦給SDL,不能把frame的窗口句柄賦給SDL,具體是為什么,我沒去研究,可能是跟windows和linux的窗口機制不一樣有關,哪為知道為什么的請告訴我為什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM