【问题标题】:Gstreamer and QWidgetsGstreamer 和 QWidgets
【发布时间】:2013-06-19 05:31:35
【问题描述】:

阅读此讨论后:Draw on top of xoverlay using Qt 我最终得到了此代码:

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。根本没有透明度。 我错过了什么?

【问题讨论】:

    标签: video qt4 gstreamer qt4.8 qtgstreamer


    【解决方案1】:

    试试这些:

    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;");
    

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

    【讨论】:

    • 这 - 就像我的代码一样 - 在我发出 watchPipeline(pipeline); 之前一直有效在目标 QWidget 上。之后,videoOverlay QWidget 失去了透明度功能。
    • @Mark 编辑了我的答案。另外,发出watchPipeline(pipeline)之后可以设置属性吗?
    • 我很抱歉,但这些都不起作用。如果我在 watchPipeline 之前设置参数,我会有一些透明度,这将在函数之后丢失。在发出 watchPipeline 后设置它们没有任何效果。这里是videoWidget.cpp的代码(包含那个函数)link
    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多