Добавлен QMenuBar в QDialog, он показывает, но подменю не открываются - PullRequest
0 голосов
/ 31 мая 2011

Я добавил QMenuBar в QDialog, используя макет, заданный в Designer, а затем вручную добавив QMenuBar, при запуске приложения и запуске QDialog я вижу QMenuBar только с заголовком меню без открывающегося подменю:
вот мой код:
это заголовочный файл, сгенерированный из 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

и вот конструктор QDialog, часть, где строится 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);

что здесь не так, почему я не вижу подменю .. Закрыть и Настройки?

1 Ответ

2 голосов
/ 31 мая 2011

Я не знаком с тем, как вы добавляете меню, потому что я обычно добавляю меню в строку меню другим способом.

Попробуйте

m_menubar->addMenu( m_menuFile );
m_menubar->addMenu( m_menuSettings );

вместо

m_menubar->addAction(m_menuFile->menuAction());
m_menubar->addAction(m_menuSettings->menuAction());

и дайте мне знать, если это сработало.Если нет, то я должен рассмотреть еще одну проблему.

...