詳解 QT 中嵌入SDL教程
QT 中嵌入SDL教程是本文要介紹的內容,前段時間在做一個音視頻編碼板卡的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的窗口機制不一樣有關,哪為知道為什么的請告訴我為什么。
小結:QT 中嵌入SDL教程,更多內容請參考編輯推薦,最后希望本文對你有幫助!