将下拉菜单添加到Qt GUI - 错误'menubar'没有声明

时间:2011-12-15 05:00:39

标签: qt

我正在尝试按照此示例http://doc.qt.nokia.com/latest/mainwindows-menus.html

在Qt中创建一个菜单

但我不断在此范围内声明错误'menuBar'

 void Window::createMenus()
 {
     saveMenu = menuBar()->addMenu("&Save");


 }

在上下文中:

 #include <QtGui>

 #include "borderlayout.h"
 #include "window.h"

 Window::Window()
 {
     QTextBrowser *centralWidget = new QTextBrowser;
     //***Change this to whatever widget(s) the drawing area is. QPainter or something?

     centralWidget->setPlainText(tr("DRAW HERE YAY"));

     BorderLayout *layout = new BorderLayout;
     layout->addWidget(centralWidget, BorderLayout::Center);
     layout->addWidget(createLabel("File ..."), BorderLayout::North);
     layout->addWidget(createLabel("Toolbar yo!"), BorderLayout::West);
     //layout->addWidget(createLabel("Status bar"), BorderLayout::South);
     //Maybe we could put in a status bar. For now let's not worry about it. It's not a requirement.
     setLayout(layout);
     createMenus();

     setWindowTitle(tr("Border Layout"));
 }

 QLabel *Window::createLabel(const QString &text)
 {
     QLabel *label = new QLabel(text);
     label->setFrameStyle(QFrame::Box | QFrame::Raised);
     return label;
 }

 void Window::createMenus()
 {
     saveMenu = menuBar()->addMenu("&Save");


 }

window.h中

 #ifndef WINDOW_H
 #define WINDOW_H

 #include <QWidget>

 class QLabel;
 class QMenu;

 class Window : public QWidget
 {
     Q_OBJECT

 public:
     Window();

 private:
     void createMenus();

     QLabel *createLabel(const QString &text);
     QMenu *saveMenu();
 };

 #endif

window.cpp

 #include <QtGui>

 #include "borderlayout.h"
 #include "window.h"

 Window::Window()
 {
     QTextBrowser *centralWidget = new QTextBrowser;
     //***Change this to whatever widget(s) the drawing area is. QPainter or something?

     centralWidget->setPlainText(tr("DRAW HERE YAY"));

     BorderLayout *layout = new BorderLayout;
     layout->addWidget(centralWidget, BorderLayout::Center);
     layout->addWidget(createLabel("File ..."), BorderLayout::North);
     layout->addWidget(createLabel("Toolbar yo!"), BorderLayout::West);
     //layout->addWidget(createLabel("Status bar"), BorderLayout::South);
     //Maybe we could put in a status bar. For now let's not worry about it. It's not a requirement.
     setLayout(layout);
     createMenus();

     setWindowTitle(tr("Border Layout"));
 }

 QLabel *Window::createLabel(const QString &text)
 {
     QLabel *label = new QLabel(text);
     label->setFrameStyle(QFrame::Box | QFrame::Raised);
     return label;
 }

 void Window::createMenus()
 {
     saveMenu = menuBar()->addMenu("&Save");


 }

1 个答案:

答案 0 :(得分:1)

菜单栏是QMainWindow类的一项功能。

由于您的Window类是直接从QWidget继承的,因此它没有menuBar方法,因此您的错误。

您需要从Window而不是QMainWindow继承您的QWidget课程。