在qt下用qmenubar控件继承的是qwidget但是弹出的界面上没有显示,在Linux最外层界面上显示,这是什么原因,恳请大神们指导指导,谢谢
1条回答
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:linux下用QT捕获程序异常
- 除此之外, 这篇博客: Qt菜单QMenu和菜单栏QMenuBar基本用法、自定义菜单用法中的 2.2代码示例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
分别添加两个类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(); }
结果如下图所示
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥15 stable diffusion
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条