在qt下用qmenubar控件继承的是qwidget但是弹出的界面上没有显示,在Linux最外层界面上显示,这是什么原因,恳请大神们指导指导,谢谢
不知道你这个问题是否已经解决, 如果还没有解决的话:分别添加两个类QMyMenu和QMyWidgetAction,其中QMyMenu继承QMenu,QMyWidgetAction继承QWidgetAction。
qmywidgetaction.h
#ifndef QMYWIDGETACTION_H
#define QMYWIDGETACTION_H
#include <QWidgetAction>
class QMyWidgetAction : public QWidgetAction
{
public:
explicit QMyWidgetAction(QWidget *parent=0);
protected:
virtual QWidget *createWidget(QWidget *parent);
};
#endif // QMYWIDGETACTION_H
qmywidgetaction.cpp
#include "qmywidgetaction.h"
#include <QPushButton>
#include <QSplitter>
#include <QLabel>
#include <QLineEdit>
#include <QPixmap>
#include <QMouseEvent>
#include <QHBoxLayout>
#include <QDebug>
QMyWidgetAction::QMyWidgetAction(QWidget *parent):QWidgetAction(parent)
{
}
QWidget *QMyWidgetAction::createWidget(QWidget *parent)
{
QLabel* lab = new QLabel("label1");
QPushButton *button1=new QPushButton("button1");
QHBoxLayout *hlayout=new QHBoxLayout;
hlayout->setMargin(0);
hlayout->setSpacing(0);
hlayout->addWidget(lab);
hlayout->addWidget(button1);
QWidget* widget = new QWidget(parent); //如果写成 QSplitter* sp = new QSplitter; 就无法显示!!!
widget->setLayout(hlayout);
connect(button1,&QPushButton::clicked,[this](bool){qDebug()<<"单击按钮!";});
return widget;
}
qmymenu.h
#ifndef QMYMENU_H
#define QMYMENU_H
#include <QMenu>
#include <QMouseEvent>
class QMyMenu : public QMenu
{
public:
explicit QMyMenu(const QString &title, QWidget *parent = Q_NULLPTR);
protected:
};
#endif // QMYMENU_H
qmymenu.cpp
#include "qmymenu.h"
#include <QAction>
QMyMenu::QMyMenu(const QString &title, QWidget *parent):QMenu(title,parent) //初始化子类构造函数
{
}
在按钮槽函数调用如下代码即可
#include "qmywidgetaction.h"
#include "qmymenu.h"
#include <QAction>
#include <QMenuBar>
#include <QVBoxLayout>
void Widget::on_pushButton_3_clicked()
{
QMyMenu *menu= new QMyMenu("菜单:继承QWidgetAction用法");
QAction *action1=new QAction(QIcon(":/resource/image/向右箭头.jpg"),"1"); //设置图标和内容
menu->addAction(action1);
QMyWidgetAction *myWidgetAction=new QMyWidgetAction(menu);
menu->addSeparator(); //添加分割线
menu->addAction(myWidgetAction);
QMenuBar *menuBar=new QMenuBar(this);
menuBar->setStyleSheet("QMenuBar{background-color:red}"
"QMenuBar:hover{background-color:blue}");
menuBar->addMenu(menu);
ui->verticalLayout->addWidget(menuBar);
ui->verticalLayout->addStretch();
}
结果如下图所示