tian_526 2017-11-01 11:50 采纳率: 0%
浏览 487

linux下 qt编程qmenubar控件

在qt下用qmenubar控件继承的是qwidget但是弹出的界面上没有显示,在Linux最外层界面上显示,这是什么原因,恳请大神们指导指导,谢谢

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:43
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接: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画图图形出现上下震荡的线条