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的窗口机制不一样有关,哪为知道为什么的请告诉我为什么

MFC嵌入方法:

SDL_Window* SDL_CreateWindowFrom(const void* data);
API详细介绍:
Use this function to create an SDL window from an existing native window.
http://wiki.libsdl.org/SDL_CreateWindowFrom
 
 
示例:

SDL_CreateWindowFrom((void *)GetDlgItem(IDC_STATIC)->GetSafeHwnd());

 
 
Qt嵌入方法:

char variable[64];         #ifdef Q_OS_WIN         sprintf(variable, "SDL_WINDOWID=0x%lx", videoWidget->winId());         #else         sprintf(variable, "SDL_WINDOWID=0x%lx", this->winId());         #endif         printf("SDL_WINDOWID = %s \n",variable);         SDL_putenv(variable);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值