Qt的添加菜单栏,菜单和子菜单的QMainWindow

Qt的添加菜单栏,菜单和子菜单的QMainWindow

问题描述:

光栅大家,Qt的添加菜单栏,菜单和子菜单的QMainWindow

我也很难添加菜单栏,菜单和使用代码子菜单的Qt的QMainWindow。

下面的代码与产生误差运行:

QWidget的:: setLayout的:尝试设置QLayout “” 上的QMainWindow “”,它已经具备了布局

注: *。主窗口出来,没有任何菜单或布局

#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); 

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

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


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




    QMainWindow *w = new QMainWindow; 
    w->setLayout(L); 
    w->show(); 

    return a.exec(); 
} 
+0

不幸的是,我曾经使用QT设计师这是非常容易创建菜单和快速。但是,我很快会有一个考试,可以要求在纸上写代码! 如果有更简单的方法可以做到这一点,请让我知道。 –

+0

你为什么要设置'QMainWindow'的布局?你究竟在努力实现什么?如果你想在'QMainWindow'的上下文中实现某些功能,你通常会在从'QWidget'派生的类中实现这个功能,然后将一个指向该类的实例的指针传递给['QMainWindow :: setCentralWidget']( http://doc.qt.io/qt-5/qmainwindow.html#setCentralWidget)。 –

+0

@ G.M。谢谢,我已经解决了这个问题。只是为了澄清,我曾经使用QWidget,而不是QMainWindow,它工作,但我不能添加菜单栏 –

附加布局*物件:

#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(); 
} 

enter image description here

每个QMainWindow应该有一个*物件(空!):

QMainWindow *w = new QMainWindow; 

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

centralWidget->setLayout(L); 
w->show(); 
+0

非常感谢,@Vladimir –

+0

非常感谢,@ eyllanesc –

这是最后的版本

#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(); 


}