2016-12-28 243 views
1

光柵大家,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,它工作,但我不能添加菜單欄 –

回答

1

附加布局中央物件:

#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

0

每個QMainWindow應該有一箇中央物件(空!):

QMainWindow *w = new QMainWindow; 

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

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

非常感謝,@Vladimir –

+0

非常感謝,@ eyllanesc –

0

這是最後的版本

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


}