• 8770阅读
  • 5回复

[提问]如何在视频窗口上画一下QFrame [复制链接]

上一主题 下一主题
离线notton
 

只看楼主 倒序阅读 楼主  发表于: 2011-05-02
在sdl+qt+video上做个类似效果:
视频显示的QFrame(QWidget)上显示一下QFrame,若不加视频数据没有问题,正在播放视频时就不行了,显示不了QFrame
c++ dev
离线downstairs

只看该作者 1楼 发表于: 2011-05-02
设置两个顶级的window窗口。然后把前面的opacity设为 50%
喜爱编程的猫头鹰
离线roywillow

只看该作者 2楼 发表于: 2011-05-02
或许用QDialog然后设置透明度会更合适一些
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线duduqq

只看该作者 3楼 发表于: 2011-05-03
把视频的每一帧自己画上去,再画上面的控件
离线notton

只看该作者 4楼 发表于: 2011-05-03
由于自己写的代码比较分散,把相关的地方贴出来:
m_renderVideo = new QFrame(this);
    m_renderVideo->setObjectName(QString::fromUtf8("renderVideo"));
    m_renderVideo->setAutoFillBackground(false); //要写它,否则刷新很占CPU
    m_renderVideo->setToolTip("DoubleClick into FullScreen");
    //m_renderVideo->setAttribute(Qt::WA_NoSystemBackground, true);
    //m_renderVideo->setAttribute(Qt::WA_PaintOnScreen, true);    
    m_playerLayout->addWidget(m_renderVideo);
    
    QString strImageFile = g_skin->property("render_image");
    m_previewBtnPrompt = new QFrame(this);
    m_previewBtnPrompt->setStyleSheet(QString("border-image: url(\"%1\");color: red;").arg(strImageFile));
    m_previewBtnPrompt->setFixedSize(200, 100);
    Qt::WindowFlags flags = m_previewBtnPrompt->windowFlags();
    flags |= Qt::WindowStaysOnTopHint;
    m_previewBtnPrompt->setWindowFlags( flags );
    m_previewBtnPrompt->show();
测试结果:
1. 若m_renderVideo渲染QImage,m_previewBtnPrompt 显示在上面是没有问题的。
2。若m_renderVideo用SDL渲染video后(播放状态),不调用m_previewBtnPrompt->update(repaint)则m_previewBtnPrompt显示不出来,若与视频播放同步刷新m_previewBtnPrompt,则非常闪烁。

不太明白3楼上所说的如何再绘制控件以保证它不闪烁。个人觉得调用Qframe的painter是刷新是相当慢的,不适合视频播放(也许有其它办法)
c++ dev
离线notton

只看该作者 5楼 发表于: 2011-05-03
把m_previewBtnPrompt->setWindowFlags( Qt::Tool);或其它Qt::drawer也行,但有个问题,就是m_previewBtnPrompt不能随着其parent移动而移动.
c++ dev
快速回复
限100 字节
 
上一个 下一个