QT5自定义QWidget无法显示

QT5 custom QWidget cannot be displayed

我正在用QT添加四个播放Windows,每个都有右键菜单, 我要的效果: Using the effects of the QWidget

代码:

        m_layout->setSpacing(0);
        m_layout->setContentsMargins(0,0,0,0);
        QWidget *w1= new QWidget(video_window);
        QWidget *w2= new QWidget(video_window);
        QWidget *w3= new QWidget(video_window);
        QWidget *w4= new QWidget(video_window);
        m_layout->addWidget(w1,0,0,1,1);
        m_layout->addWidget(w2,0,1,1,1);
        m_layout->addWidget(w3,1,0,1,1);
        m_layout->addWidget(w4,1,1,1,1);
        video_window->setLayout(m_layout);

但是当我用我的自定义小部件替换小部件时它没有显示:

Video_play::Video_play(QWidget *parent) : QWidget(parent)
{
    this->init();
}


void Video_play::init()
{
    Act_stop=new QAction(tr("停止预览"),this);
    Act_preview=new QAction(tr("预览"),this);

    Act_cut1=new QAction(tr("全屏"),this);
    Act_cut4=new QAction(tr("切换4画面"),this);
    Act_cut8=new QAction(tr("切换8画面"),this);
    Act_cut16=new QAction(tr("切换16画面"),this);

    connect(Act_stop, SIGNAL(triggered()), this, SLOT(stop_preview()));
    connect(Act_preview, SIGNAL(triggered()), this, SLOT(action_preview()));

    connect(Act_cut1, SIGNAL(triggered()), this, SLOT(cut_1()));
    connect(Act_cut4, SIGNAL(triggered()), this, SLOT(cut_4()));
    connect(Act_cut8, SIGNAL(triggered()), this, SLOT(cut_8()));
    connect(Act_cut16, SIGNAL(triggered()), this, SLOT(cut_16()));
    this->setStyleSheet("QMenu {background-color:rgba(255,255,255,1);border:1px solid rgba(82,130,164,1);}QMenu::item:selected {background:rgba(82,130,164,1);border:1px solid rgba(82,130,164,1);}");
 }
 void Video_play::contextMenuEvent(QContextMenuEvent *event)
 {

    QCursor cur=this->cursor();
    QMenu *menu=new QMenu(this);

    menu->addAction(Act_preview);
    menu->addAction(Act_stop);
    menu->addAction(Act_cut1);
    menu->addAction(Act_cut4);
    menu->addAction(Act_cut8);
    menu->addAction(Act_cut16);
    menu->exec(cur.pos());
}

但是:

Using the effects of the custom QWidget

自定义Widget添加如下方法解决问题

void CustomWidget::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }