QT学习笔记(七)QMainWindow:实现一个简单的界面
·
一、菜单栏
- 一个窗口只能一个菜单栏,位于顶部。
- 过程:创建菜单栏->放入窗口->创建菜单->创建菜单项
- 库:
#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);//默认是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);
- 效果:刚刚的浮动窗口就会显示在中心部件外围的指定位置

- 补充说明
- 由于中心部件也只能有一个,所以是set
全部代码:
#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()
{
}
更多推荐
所有评论(0)