詳解 QT 中嵌入SDL教程
QT 中嵌入SDL教程是本文要介紹的內(nèi)容,前段時(shí)間在做一個(gè)音視頻編碼板卡的PC跨平臺(tái)程序,使用QT框架,其中有塊功能是往QT里嵌入SDL,來(lái)播放YUV格式幀數(shù)據(jù),現(xiàn)在已經(jīng)在windows和linux下完成。
我瀏覽論壇的時(shí)候,發(fā)現(xiàn)好多同僚在做我以前的準(zhǔn)備工作。在這里我把我的一些經(jīng)驗(yàn)寫出來(lái),希望對(duì)這些同僚有點(diǎn)幫助,當(dāng)然可能有有一些錯(cuò)誤,請(qǐng)指出來(lái),大家一起進(jìn)步。
一.yay-20060421-2.zip這個(gè)包是一個(gè)使用SDL的YUV的播放器源代碼,在Linux下可用。
二.至于往QT里嵌入SDL,你可以這樣
這個(gè)是.pro文件部分代碼:
- unix {
- -lSDL \
- -lSDLmain
- }
- win32 {
- LIBS += -L./lib/Win32Lib \
- -lSDL \
- -lSDLmain
- }
Windows下的SDL庫(kù)文件有3個(gè)sdl.lib, SDLmain.lib 和sdl.dll。將sdl.lib,SDLmain.lib 放在./lib/Win32Lib目錄下,講sdl.dll跟你的執(zhí)行文件放在一起。
Linux下一般都為幫你安裝好SDL,如果沒(méi)安裝還沒(méi)關(guān)系,下一個(gè),配置下環(huán)境變量。Linux下的SDL靜態(tài)庫(kù)為libSDL.a和libSDLmain.a。
三.SDL實(shí)現(xiàn)代碼,參考yay-20060421-2.zip 里面的代碼就行。往QT里嵌入SDL的代碼其實(shí)很惡心,也最重要!在初始化的時(shí)候加上這么一段代碼:
- /*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的環(huán)境變量就可以了,但這在windows下和linux下有點(diǎn)區(qū)別,frame_pre為MainWindow下的一個(gè)frame。你不能將MainWindow的句柄賦給SDL,但在Linux下,你又必須把MainWindow的句柄賦給SDL,不能把frame的窗口句柄賦給SDL,具體是為什么,我沒(méi)去研究,可能是跟windows和linux的窗口機(jī)制不一樣有關(guān),哪為知道為什么的請(qǐng)告訴我為什么。
小結(jié):QT 中嵌入SDL教程,更多內(nèi)容請(qǐng)參考編輯推薦,最后希望本文對(duì)你有幫助!