I have a hard time adding menu Bar, menus and sub menus to Qt QMainWindow programmatically.
The following code produces an error:
QWidget::setLayout: Attempting to set QLayout "" on QMainWindow "", which already has a layout
Notes : *.The main window come out without any menu or Layout (Empty!)
#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();
}
Each QMainWindow should have a central widget:
QMainWindow *w = new QMainWindow;
QWidget* centralWidget = new QWidget;
w->setCentralWidget( centralWidget );
centralWidget->setLayout(L);
w->show();
This is the final version
#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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With