当前位置: 代码迷 >> QT开发 >> Qt调用SDL的有关问题
  详细解决方案

Qt调用SDL的有关问题

热度:270   发布时间:2016-04-25 03:03:52.0
Qt调用SDL的问题
我将SDL嵌入Qt中来做一个YUV播放器,这里需要将Qt的标题栏和边框隐藏,可是当我将边框隐藏后Qt界面会有一部分失效,或者Qwebview加载网页的时候特别卡,有人碰到过这种情况吗?
我发现加载SDL和隐藏边框的代码同时存在就会有各种问题,比如Qt界面上面一条失效(在有的机器上没事),就是我自己写的最小化和关闭按钮就会失效,因为我写了整个页面的拖动事件,失效就是最上面有一块区域拖动无效,给我的感觉就像多了一个标题栏把那一块盖住了似的,或者旁边一个webview加载网页会特别卡。
有人碰到过这种情况吗?求解答

//这是隐藏边框的代码
this->setWindowFlags(Qt::FramelessWindowHint);
//下面是将SDL嵌入Qt控件中的代码
void MainWindow::CreateSDLWindow()
{
    QWidget *widget  = ui->SDLWindow;
    {
        char winID[32]={0};
        //获取窗口的大小
        QSize size = ui->SDLWindow->baseSize();

        sprintf(winID,"SDL_WINDOWID=0x%lx",(long unsigned int)widget->winId());

        SDL_putenv(winID);

        if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO| SDL_INIT_TIMER))
        {
            qDebug("Cannot initialize SDL");
        }
        atexit(SDL_Quit);
        pSDLSurface = SDL_SetVideoMode(size.width(),size.height(),0,SDL_HWSURFACE|SDL_ANYFORMAT);
        if(!pSDLSurface)
        {
            qDebug("SDL Cannot set video mode");
        }
    }
    //MainWindow *mainw=new MainWindow(this);

}

------解决思路----------------------
感觉是SDL遮住了Qt绘制的控件  你试试把SDL放到其他的widget上   如果你在Mainwindow里添加widget后 这个widget其实是在Mainwindow图层的上面  所以会遮住
------解决思路----------------------
调用winId()时间地方不对
你试一下单独调用winId,至于sdl的什么都不弄,看看会不会有这样的效果
  相关解决方案