QMainWindow 是Qt框架中的一个用于创建主窗口式界面的类。它提供了一种便捷的方法来创建具有菜单、工具栏、状态栏、中心区域和可选的侧边栏等元素的应用程序主窗口。
1. 菜单栏
一个主窗口最多只有一个菜单栏,可以是横向或纵向放置,其中可以包含各种菜单、子菜单和操作,以提供应用程序的功能和选项。。
QMenuBar --菜单栏类,即下图中全部红色区域标记,菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度。
QMenu --菜单项,即下图中绿色区域,下图中红色区域中的“测试”,“test1”,"test2"都分别是一个独立的菜单,包含各个子菜单。QMenu还可以用来创建弹出菜单。
QAction --子菜单,即下图中蓝色区域标记的内容,一个子菜单对应一个操作。
#include "mainwindow.h"
#include <QMenuBar>
#include <QPushButton>
#include <QToolBar>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//重置窗口大小
resize(600,400);
//菜单栏创建,菜单栏最多只能有1个
//QmenuBar对象已经被默认放进对象树里
QMenuBar * bar = menuBar();
//将菜单栏放入窗口
setMenuBar(bar);
//创建菜单
QMenu * fileMenu = bar->addMenu(QStringLiteral("文件"));
QMenu * editMenu = bar->addMenu(QStringLiteral("编辑"));
//创建菜单项
QAction * newAction = fileMenu->addAction(QStringLiteral("新建"));
//添加分割线
fileMenu->addSeparator();
QAction * openAction = fileMenu->addAction(QStringLiteral("打开"));
}
MainWindow::~MainWindow()
{
}
2. 工具栏
工具栏用于容纳各种工具按钮、操作和小部件,以便用户可以快速访问常用功能。
下面在之前代码的基础上又增添了部分工具栏相关代码,代码运行如上图所示,实现了添加工具栏、向工具栏中添加按钮控件等功能。代码如下:
#include "mainwindow.h"
#include <QMenuBar>
#include <QPushButton>
#include <QToolBar>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//重置窗口大小
resize(600,400);
//菜单栏创建,菜单栏最多只能有1个
//QmenuBar对象已经被默认放进对象树里
QMenuBar * bar = menuBar();
//将菜单栏放入窗口
setMenuBar(bar);
//创建菜单
QMenu * fileMenu = bar->addMenu(QStringLiteral("文件"));
QMenu * editMenu = bar->addMenu(QStringLiteral("编辑"));
//创建菜单项
QAction * newAction = fileMenu->addAction(QStringLiteral("新建"));
//添加分割线
fileMenu->addSeparator();
QAction * openAction = fileMenu->addAction(QStringLiteral("打开"));
//工具栏创建 工具栏可以有多个
QToolBar * toolBar = new QToolBar(this);
//工具栏放入窗口
addToolBar(toolBar);
//设置只允许左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
//设置浮动
toolBar->setFloatable(false);
//设置移动开关
toolBar->setMovable(true);
//工具栏中设置内容
toolBar->addAction(newAction);
toolBar->addSeparator();
toolBar->addAction(openAction);
//工具栏中添加一些小的控件
QPushButton * btn = new QPushButton("open",this);
toolBar->addWidget(btn);
}
3. 状态栏
QMainWindow 具有一个可选的状态栏,可用于显示应用程序状态、进度信息和其他通知。
下面是状态栏的一个简单演示。
#include "mainwindow.h"
#include <QMenuBar>
#include <QPushButton>
#include <QToolBar>
#include <QStatusBar>
#include <QDockWidget>
#include <QTextEdit>
#include <QDebug>
#include <QLabel>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//重置窗口大小
resize(600,400);
//状态栏,最多有一个
QStatusBar * stBar = statusBar();
//设置到窗口中
setStatusBar(stBar);
//放标签控件
QLabel * label = new QLabel(QStringLiteral("提示信息"),this);
stBar->addWidget(label);
QLabel * label2 = new QLabel(QStringLiteral("右侧提示信息"),this);
stBar->addPermanentWidget(label2);
}
MainWindow::~MainWindow()
{
}
4. 铆接部件(浮动窗口)
Qt中浮动窗口类为QDockWidget,QDockWidget继承至QWidget,这种窗口可以设置在主窗口的Dock Widget area,可以有多个。
//浮动窗口,可以有多个
QDockWidget * dockWidget = new QDockWidget(QStringLiteral("浮动窗口01"),this);
//将浮动窗口添加至窗口,本质是this.addDockWidget()的略写
addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
//设置只允许上下停靠
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea|Qt::BottomDockWidgetArea);
5. 中心部件
主窗口通常包括一个中心区域,用于显示应用程序的主要内容,例如文本编辑器、绘图区域或视图窗口,下面是一个利用QTextEdit做核心部件的文本编辑器示例。
//设置(核心)中心部件
QTextEdit * edit = new QTextEdit(this);
setCentralWidget(edit);
6. 小结
将上面所有代码整合下来后运行结果如图:
上面几部分中菜单栏、状态栏只能有一个,所以在定义的时候不需要new,例如QStatusBar * stBar = statusBar();
,new的操作源码中已经做好了。将菜单栏、状态栏添加进窗口用set,因为是唯一确定的。
而那些可以同时有多个的部分,定义的时候就需要new,例如 QToolBar * toolBar = new QToolBar(this);
将工具栏这种可以有多个的部分放进窗口,使用的是add操作。