0

この議論を読んだ後: 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、アルファ ブレンディングを使用して別のオブジェクトを配置したりしたいと考えています。メインアプリでこのコードを試しました:

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ます。透け感は全くありません。私は何が欠けていますか?

4

1 に答える 1

0

これらを試してください:

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

3 番目のオプション:

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

ウィジェットを透明にする方法の詳細:

于 2013-06-08T11:35:08.443 に答える