Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt将菜单栏、菜单和子菜单添加到QMainWindow_C++_Qt_Qt5_Qmainwindow_Qmenubar - Fatal编程技术网

C++ Qt将菜单栏、菜单和子菜单添加到QMainWindow

C++ Qt将菜单栏、菜单和子菜单添加到QMainWindow,c++,qt,qt5,qmainwindow,qmenubar,C++,Qt,Qt5,Qmainwindow,Qmenubar,我很难通过编程方式将菜单栏、菜单和子菜单添加到QtQmainWindow 以下代码产生错误: QWidget::setLayout:正在尝试在QMainWindow“”上设置QLayout“”,该窗口已具有布局 注: *。主窗口显示时没有任何菜单或布局(空!) #包括 #包括 #包括 #包括 #包括 #包括 #包括“mainwindow.h” #包括 #包括 int main(int argc,char*argv[]) { 质量保证申请a(argc、argv); QMenuBar*菜单=新的QM

我很难通过编程方式将菜单栏、菜单和子菜单添加到QtQmainWindow

以下代码产生错误:

QWidget::setLayout:正在尝试在QMainWindow“”上设置QLayout“”,该窗口已具有布局

注: *。主窗口显示时没有任何菜单或布局(空!)

#包括
#包括
#包括
#包括
#包括
#包括
#包括“mainwindow.h”
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QMenuBar*菜单=新的QMenuBar;
QMenu*文件=新的QMenu();
文件->添加菜单(“&file”);
菜单->添加菜单(文件);
QSlider*s1=新的QSlider(Qt::水平);
QSlider*s2=新的QSlider(Qt::垂直);
QSpinBox*sb=新QSpinBox;
QHBoxLayout*L=新的QHBoxLayout;
L->addWidget(s1);
L->addWidget(s2);
L->addWidget(sb);
QMainWindow*w=新的QMainWindow;
w->设置布局(L);
w->show();
返回a.exec();
}

每个
QMainWindow
都应该有一个中心小部件:

QMainWindow *w = new QMainWindow;

QWidget* centralWidget = new QWidget;
w->setCentralWidget( centralWidget );

centralWidget->setLayout(L);
w->show();
#include <QApplication>

#include <QApplication>
#include<QSlider>
#include<QSpinBox>
#include<QHBoxLayout>
#include<QWidget>

#include<QMenuBar>
#include<QStatusBar>
#include <QMainWindow>

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);

    QMainWindow *w = new QMainWindow;

    QMenuBar *menu = new QMenuBar;
    QMenu *file = new QMenu();
    file->addMenu("&File");
    menu->addMenu(file);

    QWidget *centralwidget = new QWidget(w);
    w->setCentralWidget(centralwidget);

    QSlider *s1 = new QSlider(Qt::Horizontal, centralwidget);
    QSlider *s2 = new QSlider(Qt::Vertical, centralwidget);
    QSpinBox *sb = new QSpinBox;


    QHBoxLayout *L = new QHBoxLayout(centralwidget);
    L->addWidget(s1);
    L->addWidget(s2);
    L->addWidget(sb);
    w->show();

    return a.exec();
}

将布局添加到中心小部件:

QMainWindow *w = new QMainWindow;

QWidget* centralWidget = new QWidget;
w->setCentralWidget( centralWidget );

centralWidget->setLayout(L);
w->show();
#include <QApplication>

#include <QApplication>
#include<QSlider>
#include<QSpinBox>
#include<QHBoxLayout>
#include<QWidget>

#include<QMenuBar>
#include<QStatusBar>
#include <QMainWindow>

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);

    QMainWindow *w = new QMainWindow;

    QMenuBar *menu = new QMenuBar;
    QMenu *file = new QMenu();
    file->addMenu("&File");
    menu->addMenu(file);

    QWidget *centralwidget = new QWidget(w);
    w->setCentralWidget(centralwidget);

    QSlider *s1 = new QSlider(Qt::Horizontal, centralwidget);
    QSlider *s2 = new QSlider(Qt::Vertical, centralwidget);
    QSpinBox *sb = new QSpinBox;


    QHBoxLayout *L = new QHBoxLayout(centralwidget);
    L->addWidget(s1);
    L->addWidget(s2);
    L->addWidget(sb);
    w->show();

    return a.exec();
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QMainWindow*w=新的QMainWindow;
QMenuBar*菜单=新的QMenuBar;
QMenu*文件=新的QMenu();
文件->添加菜单(“&file”);
菜单->添加菜单(文件);
QWidget*centralwidget=新的QWidget(w);
w->setCentralWidget(centralwidget);
QSlider*s1=新的QSlider(Qt::水平,中心Widget);
QSlider*s2=新的QSlider(Qt::垂直,中心Widget);
QSpinBox*sb=新QSpinBox;
QHBoxLayout*L=新的QHBoxLayout(centralwidget);
L->addWidget(s1);
L->addWidget(s2);
L->addWidget(sb);
w->show();
返回a.exec();
}

这是最终版本

#include <QApplication>

#include <QApplication>
#include<QSlider>
#include<QSpinBox>
#include<QHBoxLayout>
#include<QWidget>

#include "mainwindow.h"
#include<QMenuBar>
#include<QStatusBar>

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);


            QSlider *s1 = new QSlider(Qt::Horizontal);
               QSlider *s2 = new QSlider(Qt::Vertical);
               QSpinBox *sb = new QSpinBox;


     QMainWindow *w = new QMainWindow;

     QWidget *cw = new QWidget(w);

     QMenuBar *menu = new QMenuBar(cw);


     QHBoxLayout *L = new QHBoxLayout(cw);
      L->addWidget(s1);
      L->addWidget(s2);
      L->addWidget(sb);

             QMenu *file = new QMenu("&File");
             file->addMenu("Open");
              file->addMenu("new");

              QMenu *Build = new QMenu("&Build");
              Build->addAction("Rebuild this file");
               Build->addAction("Rebuild All");

             menu->addMenu(file);
             menu->addMenu(Build);

    w->setCentralWidget(cw);

     w->show();


     QObject::connect  (s1,SIGNAL(valueChanged(int) ),  sb,SLOT(setValue(int) )   );
     QObject::connect  (s1,SIGNAL(valueChanged(int) ),  s2,SLOT(setValue(int) )   );

     QObject::connect  (s2,SIGNAL(valueChanged(int) ),  sb,SLOT(setValue(int) )   );
     QObject::connect  (s2,SIGNAL(valueChanged(int) ),  s1,SLOT(setValue(int) )   );

     QObject::connect  (sb,SIGNAL(valueChanged(int) ),  s1,SLOT(setValue(int) )    );
     QObject::connect  (sb,SIGNAL(valueChanged(int) ),  s2,SLOT(setValue(int) )    );

     return a.exec();


}
#包括
#包括
#包括
#包括
#包括
#包括
#包括“mainwindow.h”
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QSlider*s1=新的QSlider(Qt::水平);
QSlider*s2=新的QSlider(Qt::垂直);
QSpinBox*sb=新QSpinBox;
QMainWindow*w=新的QMainWindow;
QWidget*cw=新的QWidget(w);
QMenuBar*菜单=新的QMenuBar(cw);
QHBoxLayout*L=新的QHBoxLayout(cw);
L->addWidget(s1);
L->addWidget(s2);
L->addWidget(sb);
QMenu*file=新的QMenu(“&file”);
文件->添加菜单(“打开”);
文件->添加菜单(“新建”);
QMenu*Build=新QMenu(“&Build”);
Build->addAction(“重建此文件”);
构建->添加操作(“全部重建”);
菜单->添加菜单(文件);
菜单->添加菜单(构建);
w->setCentralWidget(cw);
w->show();
QObject::connect(s1,信号(值更改(int)),sb,插槽(设置值(int));
QObject::connect(s1,信号(值更改(int)),s2,插槽(设置值(int));
QObject::connect(s2,信号(值更改(int)),sb,插槽(设置值(int));
QObject::connect(s2,信号(值更改(int)),s1,插槽(设置值(int));
QObject::connect(sb,信号(值更改(int)),s1,插槽(设置值(int));
QObject::connect(sb,信号(值更改(int)),s2,插槽(设置值(int));
返回a.exec();
}

为了尝试清楚地回答标题所建议的问题(这本身不是一个问题),
QMainWindow
在默认情况下已经有一个空的菜单栏,还有其他类似于中心小部件的功能

要访问此
QMenuBar
并用您选择的内容填充它,只需从
QMainWindow
实例调用
menuBar()
。 要将子菜单添加到
QMenuBar
,请使用
QMenuBar::addMenu

例如:

QAction* newAct = new QAction("save");
auto fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
auto submenu = fileMenu->addMenu("Submenu");
submenu->addAction(new QAction("action1");
submenu->addAction(new QAction("action2");

有关更多信息,请看这个Qt示例:还有
QMenuBar
reference

,不幸的是,我曾经使用Qt designer创建菜单,这非常简单和快速。然而,我将很快有一个考试,可能会要求写在纸上的代码!如果有更简单的方法,请告诉我。为什么要设置
QMainWindow
的布局?你到底想达到什么目的?如果您想在
QMainWindow
的上下文中实现某些功能,您通常会在从
QWidget
派生的类中实现该功能,然后将指向该类实例的指针传递给@G.M。谢谢,我已经解决了这个问题。为了澄清一下,我曾经使用QWidget而不是QMainWindow,它可以正常工作,但我无法添加菜单栏