Added QMenuBar in QDialog it showing but sub menus dosn't open
-
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_NAMESPACEclass 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 UiQT_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?
-
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.
-
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); -
Use QMenu::AddMenu insted of AddAction in QMenu