Gstreamer и QWidgets
Прочитав это обсуждение: нарисуйте поверх xoverlay, используя 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
с альфа-смешением. Я попробовал этот код в основном приложении:
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
, Там нет прозрачности вообще. Что мне не хватает?
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;");
Подробнее о том, как сделать виджеты прозрачными: