//头文件
#ifndef LACTION_H
#define LACTION_H
#include <QWidgetAction>
class LAction : public QWidgetAction
{
public :
explicit LAction(QWidget *parent = 0);
~LAction();
protected:
QWidget * createWidget(QWidget *parent);
private:
QWidget *myWidget;
};
#endif // LACTION_H
//源文件
#include "LAction.h"#include <QLabel>#include <QHBoxLayout>#include <QMessageBox>LAction::LAction(QWidget *parent): QWidgetAction(parent){
myWidget = new QWidget();myWidget->setWindowFlags(Qt::FramelessWindowHint);myWidget->setStyleSheet("background-color: rgb(37, 48, 255);");QVBoxLayout *layout = new QVBoxLayout();QLabel *music_name_label = new QLabel();music_name_label->setFixedSize(80,80);music_name_label->setAlignment(Qt::AlignCenter);layout->addWidget(music_name_label, 0, Qt::AlignCenter);layout->setSpacing(5);layout->setContentsMargins(0, 0, 0, 5);music_name_label->setText("player");music_name_label->setEnabled(false);myWidget->setLayout(layout);}
LAction::~LAction(){}
QWidget * LAction::createWidget(QWidget *parent){
myWidget->setParent(parent);return myWidget;}
/******************************************************************/#include "testwindow.h"#include "menubtn.h"#include <QMenu>#include <QWidgetAction>#include <QVBoxLayout>#include <QLabel>TestWindow::TestWindow(QWidget *parent): QMainWindow(parent){
QMenu * menu = new QMenu(this);LAction * la = new LAction(menu); //传入Action被添加到的控件指针menu->addAction("OK");menu->addAction("SORRY");menu->addSeparator();menu->addAction(la);MenuButton * menuBtn = new MenuButton(menu,false,this);setWindowTitle("parent");}
TestWindow::~TestWindow(){}
注意点:为myWidget 上添加layout,或为myWidget 指点宽高,否则music_name_label会被放置在到menu的顶部