Такой метод работает если видим хотя бы один из тулбаров. Если его выключить все тулбары из списка видимых тулбаров, то метод не работает.
Так что по-прежнему если
выключить все тулбары, то увидеть список досупных тулбаров или включить какой либо из них не возможно
добавлено спустя 26 минут: Спасибо за ответы,
я решил не искать лучшего в хорошем а просто создаю меню заново
когда это необходимо. Методику создания скопировал из
QMenu *QMainWindow::createPopupMenu()
// code to create context menu from MenuBar
menuBar->setContextMenuPolicy(Qt::CustomContextMenu); // that line is very neccessary
QObject::connect(menuBar, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(ContextMenuRequested(const QPoint &)));
...
void SomeClass::ContextMenuRequested(const QPoint &p)
{
//QContextMenuEvent e(QContextMenuEvent::Other, p);
// QCoreApplication::sendEvent(m_someToolbar, &e);
QMenu *menu = 0;
QList<QDockWidget *> dockwidgets = qFindChildren<QDockWidget *>(m_pMainWindow);
if (dockwidgets.size()) {
menu = new QMenu(m_pMainWindow);
for (int i = 0; i < dockwidgets.size(); ++i)
if (dockwidgets.at(i)->parentWidget() == m_pMainWindow)
menu->addAction(dockwidgets.at(i)->toggleViewAction());
menu->addSeparator();
}
QList<QToolBar *> toolbars = qFindChildren<QToolBar *>(m_pMainWindow);
if (toolbars.size()) {
if (!menu)
menu = new QMenu(m_pMainWindow);
for (int i = 0; i < toolbars.size(); ++i)
if (toolbars.at(i)->parentWidget() == m_pMainWindow)
menu->addAction(toolbars.at(i)->toggleViewAction());
}
menu->exec(p);
}
[/code]