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
Forum Updated to NodeBB v4.3 + New Features

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

Scheduled Pinned Locked Moved General and Desktop
4 Posts 3 Posters 6.2k 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