叠加小部件

时间:2015-09-08 07:54:17

标签: c++ qt overlay transparent

我正在尝试在我的视频播放器上叠加几个按钮。

我添加了一个名为overlay.cpp的新类,它将QWidget子类化为覆盖目的。

我在代码中所做的是将按钮叠加到视频上。在我的centralWidget中,我添加了一个verticalLayout并将其变换为QWidget。该视频已添加到此verticalLayout中。程序运行后,视频播放效果良好。但是,什么不起作用的是按钮的叠加。即使设置了背景,背景似乎也不透明。我不确定是什么导致它看起来不透明。

我的代码如下:

的main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[]){

  QApplication a(argc, argv);
  MainWindow w;
  w.show();

  return a.exec();

}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent):QMainWindow(parent), 
  ui(new Ui::MainWindow){
  ui->setupUI(this);
  initializeVideo();
  initializeButton();
}

MainWindow::~MainWindow(){

  delete ui;
}

void MainWindow::initializeVideo(){

  QVideoWidget *v_widget = new QVideoWidget;
  QMediaPlayer *m_player = new QMediaPlayer;

  m_player->setMedia(QUrl::fromLocalFile("C:/user/Desktop/video.wmv"));
  m_player->setVideoOutput(v_widget);

  ui->verticalLayout->addWidget(v_widget);

  m_player->player();
  v_widget->show();

}

void MainWindow::initializeButton(){

  QFrame *b_frame = new QFrame;
  QGridLayout *grid = new QGridLayout;
  b_frame->setLayout(grid);

  b_frame->setAttribute(Qt::WA_TranslucentBackground, true);

  QPushButton *buttonStop = new QPushButton;
  buttonStop->setText("STOP");
  grid->addWidget(buttonStop, 0, 0, Qt::AlignTop);

  overlay *overlay_1 = new overlay;
  QGridLayout *gridLayout = new QGridLayout;
  gridLayout->addWidget(b_frame);
  overlay_1->setLayout(gridLayout);

  overlay_1->setParent(ui->verticalWidget);
  overlay_1->show();

  b_frame->show();

}

overlay.cpp

#include "overlay.h"
overlay::overlay(QWidget *parent): QWidget(parent){

  this->setAttribute(Qt::WA_TranslucentBackground, true);
}

0 个答案:

没有答案