以前讨论了SDL嵌入Qt Widget, 比较规范的方法是,我在以前的文章里已经提过了:
char variable[64];
_snprintf(variable, sizeof(variable), "SDL_WINDOWID=0x%lx", winId());
SDL_putenv(variable);
_snprintf(variable, sizeof(variable), "SDL_WINDOWID=0x%lx", winId());
SDL_putenv(variable);
这里只使用了三行程序,很简单,唯一要注意的一点:不要使用effectiveWinId (),而是要使用winId ()。
现在我们要使用这个已经嵌入SDL的Qt Widget, 我做了两个测试:
测试1:在MainWindow中使用setCentralWidget
SDLVideo *sdlvideo = new SDLVideo;
setCentralWidget(sdlvideo);
setCentralWidget(sdlvideo);
结果:无法成为MainWindow的CentralWidget,程序执行一下就立刻结束。测试2:在MainWindow中使用QDockWidget
SDLVideo *SDLVideo_dock = new SDLVideo;
QDockWidget *dock_a = new QDockWidget(tr("Media Player of ... ..."), this);
dock_a->setWidget(SDLVideo_dock);
//addDockWidget(Qt::LeftDockWidgetArea, dock_a);
viewMenu->addAction(dock_a->toggleViewAction());
QDockWidget *dock_a = new QDockWidget(tr("Media Player of ... ..."), this);
dock_a->setWidget(SDLVideo_dock);
//addDockWidget(Qt::LeftDockWidgetArea, dock_a);
viewMenu->addAction(dock_a->toggleViewAction());
结果:和预料的一样,也无法成为MainWindow的QDockWidget,程序执行一下就立刻结束。
结论:经过两个测试证明,SDL嵌入Qt Widget,在一定程度上不能和一般的Qt Widget一样工作,虽然现在它也是Widget但是它只是一个“类Qt Widget”,一定程度上也是一个SDL app,它只是嵌入一个Qt Widget。原因是winid的返回值的问题,在windows下会有点问题,在linux下以上的程序应该就没有问题。
没有评论:
发表评论