zoukankan      html  css  js  c++  java
  • 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的窗口机制不一样有关,哪为知道为什么的请告诉我为什么。

  • 相关阅读:
    jQuery 2.0.3 源码分析 Deferred(最细的实现剖析,带图)
    jQuery 2.0.3 源码分析 Deferrred概念
    jQuery 2.0.3 源码分析core
    jQuery 2.0.3 源码分析core
    JavaScript异步机制
    使用Node.js实现数据推送
    自定义jQuery插件Step by Step
    转 CSS hack:针对IE6,IE7,firefox显示不同效果
    ie6,ie7兼容性总结(转)
    QQ浏览器X5内核问题汇总
  • 原文地址:https://www.cnblogs.com/findumars/p/4982802.html
Copyright © 2011-2022 走看看