Gstreamer and QWidgets



在阅读了这个讨论之后:使用Qt在xoverlay顶部绘制,我最终得到了这个代码:

class Player : public QGst::Ui::VideoWidget { ... }
void Player::play() {
  QGst::PipelinePtr pipeline = QGst::ElementFactory::make("playbin2").dynamicCast<QGst::Pipeline>();
  watchPipeline(pipeline);
  pipeline->setProperty("uri", "/path/to/my/video.mp4");
  QGst::BusPtr bus = pipeline->bus();
  bus->addSignalWatch();
  QGlib::connect(bus, "message", this, &Player::onBusMessage);
  pipeline->setState(QGst::StatePlaying);
}

我的视频在这个QWidget中播放。现在我想在这个上面添加另一个QWidget来绘制一些东西,或者放置另一个QWidget与alpha混合。我在主应用程序中尝试了以下代码:

Player *player = new Player(this);
QWidget *videoOverlay = new QWidget(player);
// set the videoOverlay geometry
videoOverlay->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
videoOverlay->setAttribute(Qt::WA_TranslucentBackground);

但我得到一个黑色不透明的QWidget。完全没有透明度。我错过了什么?

试试这些:

videoOverlay->setAttribute(Qt::WA_NoBackground);
videoOverlay->setAttribute(Qt::WA_NoSystemBackground);
videoOverlay->setAutoFillbackground(false);

或:

videoOverlay->setAutoFillBackground(true);
videoOverlay->setAttribute(Qt::WA_PaintOnScreen);
videoOverlay->setBackgroundRole(QPalette::Window);
// make the widget transparent
QPalette transparent;
transparent.setColor(QPalette::Window, QColor(128,64,128)); // transparent color
videoOverlay->setPalette(transparent);

第三种选择:

videoOverlay->setAttribute(Qt::WA_TranslucentBackground);
videoOverlay->setStyleSheet("background:transparent;");

关于如何使小部件透明的更多信息:

  • http://www.qtcentre.org/threads/32310-Translucent-Qt-widget
  • http://qt-project.org/forums/viewthread/3239

相关内容

  • 没有找到相关文章

最新更新