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();
}
答
附加布局*物件:
#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
应该有一个*物件(空!):
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();
}
不幸的是,我曾经使用QT设计师这是非常容易创建菜单和快速。但是,我很快会有一个考试,可以要求在纸上写代码! 如果有更简单的方法可以做到这一点,请让我知道。 –
你为什么要设置'QMainWindow'的布局?你究竟在努力实现什么?如果你想在'QMainWindow'的上下文中实现某些功能,你通常会在从'QWidget'派生的类中实现这个功能,然后将一个指向该类的实例的指针传递给['QMainWindow :: setCentralWidget']( http://doc.qt.io/qt-5/qmainwindow.html#setCentralWidget)。 –
@ G.M。谢谢,我已经解决了这个问题。只是为了澄清,我曾经使用QWidget,而不是QMainWindow,它工作,但我不能添加菜单栏 –