Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Added QMenuBar in QDialog it showing but sub menus dosn't open
Qt 6.11 is out! See what's new in the release blog

Added QMenuBar in QDialog it showing but sub menus dosn't open

Scheduled Pinned Locked Moved General and Desktop
4 Posts 3 Posters 6.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U Offline
    U Offline
    umen242
    wrote on last edited by
    #1

    i added QMenuBar in QDialog using layout that is set in Designer and then manully adding the QMenuBar , when running the application and the QDialog runs i see the QMenuBar with only the menu header without the opening sub menu :
    here is my code :
    this is the header file generated from the Designer :
    @QT_BEGIN_NAMESPACE

    class Ui_AutoDialog
    {
    public:
    QVBoxLayout *verticalLayout;
    QWidget *widget_menuBarHolder;
    QVBoxLayout *verticalLayout_2;
    QVBoxLayout *verticalLayout_menuBarLayOut;
    QWebView *webView;
    QWidget *widget;

    void setupUi(QDialog *AutoDialog)
    {
        if (AutoDialog->objectName().isEmpty())
            AutoDialog->setObjectName(QString::fromUtf8("AutoDialog"));
        AutoDialog->resize(436, 365);
        verticalLayout = new QVBoxLayout(AutoDialog);
        verticalLayout->setSpacing(0);
        verticalLayout->setContentsMargins(0, 0, 0, 0);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        widget_menuBarHolder = new QWidget(AutoDialog);
        widget_menuBarHolder->setObjectName(QString::fromUtf8("widget_menuBarHolder"));
        widget_menuBarHolder->setMinimumSize(QSize(0, 20));
        verticalLayout_2 = new QVBoxLayout(widget_menuBarHolder);
        verticalLayout_2->setSpacing(0);
        verticalLayout_2->setContentsMargins(0, 0, 0, 0);
        verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
        verticalLayout_menuBarLayOut = new QVBoxLayout();
        verticalLayout_menuBarLayOut->setSpacing(0);
        verticalLayout_menuBarLayOut->setObjectName(QString::fromUtf8("verticalLayout_menuBarLayOut"));
    
        verticalLayout_2->addLayout(verticalLayout_menuBarLayOut);
    
    
        verticalLayout->addWidget(widget_menuBarHolder);
    
        webView = new QWebView(AutoDialog);
        webView->setObjectName(QString::fromUtf8("webView"));
        webView->setUrl(QUrl("about:blank"));
    
        verticalLayout->addWidget(webView);
    
        widget = new QWidget(AutoDialog);
        widget->setObjectName(QString::fromUtf8("widget"));
        widget->setMinimumSize(QSize(0, 20));
    
        verticalLayout->addWidget(widget);
    
    
        retranslateUi(AutoDialog);
    
        QMetaObject::connectSlotsByName(AutoDialog);
    } // setupUi
    
    void retranslateUi(QDialog *AutoDialog)
    {
        AutoDialog->setWindowTitle(QApplication::translate("AutoDialog", "Dialog", 0, QApplication::UnicodeUTF8));
    } // retranslateUi
    

    };

    namespace Ui {
    class AutoDialog: public Ui_AutoDialog {};
    } // namespace Ui

    QT_END_NAMESPACE@

    and here is the QDialog constructor , the part where is building the QMenuBAr:

    @ui.setupUi(this);
    /ui.verticalLayout_menuBarLayOut->addWidget(SetMenuBar());
    ui.verticalLayout_menuBarLayOut->setMargin(0);
    ui.verticalLayout_menuBarLayOut->setSpacing(0);
    /

    m_actionClose = new QAction(this);
    m_actionClose->setObjectName(QString::fromUtf8("actionClose"));
    m_actionPreferences = new QAction(this);
    m_actionPreferences->setObjectName(QString::fromUtf8("actionPreferences"));

    m_menubar = new QMenuBar(this);
    m_menubar->setObjectName(QString::fromUtf8("menubar"));
    m_menubar->setGeometry(QRect(0, 0, 314, 18));
    m_menuFile = new QMenu(m_menubar);
    m_menuFile->setObjectName(QString::fromUtf8("menuFile"));
    m_menuSettings = new QMenu(m_menubar);
    m_menuSettings->setObjectName(QString::fromUtf8("menuSettings"));

    m_menubar->setMinimumSize(QSize(0, 20));
    ui.verticalLayout_menuBarLayOut->setMenuBar(m_menubar);
    m_menubar->addAction(m_menuFile->menuAction());
    m_menubar->addAction(m_menuSettings->menuAction());
    m_menuFile->addSeparator();
    m_menuFile->addAction(m_actionClose);
    m_menuSettings->addAction(m_actionPreferences);
    
    m_actionClose->setText(QApplication::translate("MainWindow", "Close", 0, QApplication::UnicodeUTF8));
    m_actionPreferences->setText(QApplication::translate("MainWindow", "Preferences", 0, QApplication::UnicodeUTF8));
    m_menuFile->setTitle(QApplication::translate("MainWindow", "File", 0, QApplication::UnicodeUTF8));
    m_menuSettings->setTitle(QApplication::translate("MainWindow", "Settings", 0, QApplication::UnicodeUTF8));
    

    bar = new QStatusBar(this);
    bar->setMinimumSize(QSize(0, 20));
    ui.verticalLayout->removeWidget(ui.widget);
    ui.verticalLayout->addWidget(bar);
    ui.verticalLayout->setMargin(0);
    ui.verticalLayout->setSpacing(0);

    pb = new QProgressBar(bar);
    pb->setTextVisible(false);
    pb->hide();

    bar->addPermanentWidget(pb);
    @

    what is wrong here why i can't see the sub menus.. Close & Preferences?

    1 Reply Last reply
    0
    • D Offline
      D Offline
      dangelog
      wrote on last edited by
      #2

      Can you make a SMALL testcase? Just one file, immediately compileable, which shows the problem?

      In any case, you seem to be using a dedicated layout for holding the menubar. Instead, install it into the toplevel layout.

      Software Engineer
      KDAB (UK) Ltd., a KDAB Group company

      1 Reply Last reply
      0
      • U Offline
        U Offline
        umen242
        wrote on last edited by
        #3

        if i install it in the top label layout , then when i build the menubar and add it to the top level in mt code :verticalLayout
        the menubar apears after the Qwebkit that is in the bottom
        beacose i set it after ui.setupUi(this);

        1 Reply Last reply
        0
        • M Offline
          M Offline
          mehdikarimi
          wrote on last edited by
          #4

          Use QMenu::AddMenu insted of AddAction in QMenu

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved