我将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的什么都不弄,看看会不会有这样的效果