一、菜单栏
- 一个窗口只能一个菜单栏,位于顶部。
- 过程:创建菜单栏->放入窗口->创建菜单->创建菜单项
- 库:
#include <QMenuBar>
- 代码示例:
QMenuBar *menubar=menuBar();
setMenuBar(menubar);
QMenu * filemenu=menubar->addMenu("File");
QMenu * Editmenu=menubar->addMenu("Edit");
QMenu * Viewmenu=menubar->addMenu("View");
QAction * newAction=filemenu->addAction("new file");
QAction * openAction=filemenu->addAction("open file");
QAction * undoAction=Editmenu->addAction("undo");
QAction * redoAction=Editmenu->addAction("redo");
Editmenu->addSeparator();
QAction * cutAction=Editmenu->addAction("cut");
QAction * copyAction=Editmenu->addAction("copy");
QAction * pasteAction=Editmenu->addAction("paste");
- 效果:
- 注释写出了每一步的含义,补充说明一下其他内容:
- addMenu和addAction操作时,也可以不创建对象,但是若要继续使用添加的对象,就需要创建了。例如:下面两句显示的效果相同,但由于后续需要往"file"菜单里添加菜单项,所以在这里创建了一个filemenu的对象,后续再对filemenu做addAction。
QMenu * filemenu=menubar->addMenu("File");
menubar->addMenu("File");
- 另外,可以通过查看返回类型,确定创建对象的类型,例如:
通过查看帮助文档,指导返回类型是QMenu,所以filemenu的类型为QMenu。
同理,查到:
filemenu->addAction的返回类型是QAction,所以菜单项的类型是QAction。 - 菜单栏对于窗口是唯一的,所以添加到窗口时是set办法(
setMenuBar
)。
二、状态栏
- 一个窗口只能一个状态栏,位于底部。
- 过程:创建状态->放入窗口->创建标签控件->标签放入状态栏
- 库:
#include <QStatusBar>
#include <QLabel>
- 代码示例:
QStatusBar *stBar=statusBar();
setStatusBar(stBar);
QLabel * LeftLebel=new QLabel("left note",this);
stBar->addWidget(LeftLebel);
QLabel * RightLebel=new QLabel("right note",this);
stBar->addPermanentWidget(RightLebel);
- 效果:左右侧分别显示了两个标签
- 补充说明:
- 状态栏添加的是标签,即QLabel,所以还需要添加库QLabel,
- 标签的左右显示不是用left和right,右侧显示是
addPermanentWidget
- 状态栏对于窗口也是唯一的,所以也是用的set办法(
setStatusBar
)
三、工具栏
- 一个窗口可以有多个工具栏,可以位于四个方向
- 过程:创建工具栏->放入窗口->可以配置一些参数(set)->创建内容/控件->添加内容/控件
- 库:
#include <QToolBar>
#include <QPushButton>
- 代码示例:
QToolBar *toolbar=new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolbar);
toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
toolbar->setFloatable(false);
toolbar->setMovable(true);
toolbar->addAction(newAction);
toolbar->addAction(openAction);
toolbar->addSeparator();
toolbar->addSeparator();
toolbar->addAction(undoAction);
toolbar->addAction(redoAction);
toolbar->addSeparator();
toolbar->addAction(cutAction);
toolbar->addAction(copyAction);
toolbar->addAction(pasteAction);
QPushButton *btn1=new QPushButton();
btn1->setParent(this);
btn1->setText("more..");
toolbar->addWidget(btn1);
- 效果:
6.补充说明:
- 这里添加了创建的菜单项,即QAction的对象。
- 创建了一个按钮,所以添加了
QPushButton
- 工具栏默认停靠范围是上,可以拖动停靠到上下左右四个位置,也可以浮动在画面内(即不停靠),设置了停靠范围后,工具栏将只能在停靠范围内停靠(我在说什么废话)或浮动在画面内,若关闭浮动,工具栏将只能停靠,这个位置的切换是通过鼠标拖动实现的,但若是关闭了移动功能,则工具栏静止在初始位置了。下图为工具栏的浮动示意:
- 由于一个窗口可以有多个工具栏,所以添加到窗口时采用的是add(
addToolBar
)
四、铆接部件(浮动窗口)
- 一个窗口可以有多个铆接部件,可以位于四个方向
- 过程:创建铆接部件>放入窗口
- 库:
#include <QDockWidget>
- 代码示例:
QDockWidget *dockwidget=new QDockWidget("test",this);
addDockWidget(Qt::TopDockWidgetArea,dockwidget);
- 效果:由于还没有添加中心,所以看不出方位
还可以拖出:
- 补充说明:
- 由于一个窗口可以有多个铆接部件,所以添加到窗口时采用的是add(
addDockWidget
) - 通过查看帮助文档,
addDockWidget
的使用方法如下:
可以看到有三个参数:DockWidgetArea
,QDockWidget
和Orientation
,其中QDockWidget
是创建的铆接部件,Orientation
的帮助文档内容如下图,可不写、
DockWidgetArea
,查看帮助文档:
选择一个填入就行
Qt::LeftDockWidgetArea
Qt::RightDockWidgetArea
Qt::TopDockWidgetArea
Qt::BottomDockWidgetArea
Qt::AllDockWidgetAreas
Qt::NoDockWidgetArea
dockwidget->setAllowedAreas(Qt::TopDockWidgetArea|Qt::RightDockWidgetArea);
五、中心部件
- 一个窗口只能由一个中心部件,位于中间
- 过程:创建中心部件->放入窗口
- 库:
#include <QTextEdit>
- 代码示例:
QTextEdit *edit=new QTextEdit(this);
setCentralWidget(edit);
- 效果:刚刚的浮动窗口就会显示在中心部件外围的指定位置
- 补充说明
全部代码:
#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QDebug>
#include <QPushButton>
#include <QStatusBar>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(600,400);
QMenuBar *menubar=menuBar();
setMenuBar(menubar);
QMenu * filemenu=menubar->addMenu("File");
QMenu * Editmenu=menubar->addMenu("Edit");
QMenu * Viewmenu=menubar->addMenu("View");
QAction * newAction=filemenu->addAction("new file");
QAction * openAction=filemenu->addAction("open file");
QAction * undoAction=Editmenu->addAction("undo");
QAction * redoAction=Editmenu->addAction("redo");
Editmenu->addSeparator();
QAction * cutAction=Editmenu->addAction("cut");
QAction * copyAction=Editmenu->addAction("copy");
QAction * pasteAction=Editmenu->addAction("paste");
QToolBar *toolbar=new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolbar);
toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
toolbar->setFloatable(true);
toolbar->setMovable(true);
toolbar->addAction(newAction);
toolbar->addAction(openAction);
toolbar->addSeparator();
toolbar->addSeparator();
toolbar->addAction(undoAction);
toolbar->addAction(redoAction);
toolbar->addSeparator();
toolbar->addAction(cutAction);
toolbar->addAction(copyAction);
toolbar->addAction(pasteAction);
QPushButton *btn1=new QPushButton();
btn1->setParent(this);
btn1->setText("more..");
toolbar->addWidget(btn1);
QStatusBar *stBar=statusBar();
setStatusBar(stBar);
QLabel * LeftLebel=new QLabel("left note",this);
stBar->addWidget(LeftLebel);
QLabel * RightLebel=new QLabel("right note",this);
stBar->addPermanentWidget(RightLebel);
QDockWidget *dockwidget=new QDockWidget("test",this);
addDockWidget(Qt::TopDockWidgetArea,dockwidget);
dockwidget->setAllowedAreas(Qt::TopDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *edit=new QTextEdit(this);
setCentralWidget(edit);
}
MainWindow::~MainWindow()
{
}