由于自己写的代码比较分散,把相关的地方贴出来:
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是刷新是相当慢的,不适合视频播放(也许有其它办法)