第六篇:主窗口部件 QMainWindow

主窗口部件 QMainWindow

主窗口提供了一个用于构建应用程序用户界面的框架。Qt 提供了以 QMainWindow 和其他一些相关的类共同完成主窗口的管理。QMainWindow 有自己的布局如下图所示,包含菜单栏、工具栏、中心部件、停靠窗口以及状态栏,使开发者可以轻松创建复杂的桌面应用程序,如文本编辑器、绘图工具、IDE等。

在这里插入图片描述

  1. 菜单栏(QMenuBar)

包含了一个下拉菜单项的列表,这些菜单项由 QAction 动作类实现。一个主窗口只能有一个菜单栏,位于主窗口顶部。

  1. 工具栏(QToolBar)

一般用于显示一些常用的菜单项目,也可以插入其他窗口部件,并且是可以移动的。一个主窗口可以拥有多个工具栏。

  1. 中心部件(Central Widget)

在主窗口的中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域。一个主窗口只能拥有一个中心部件。

  1. 停靠窗口(QDockWidget)

Dock 部件常被称为停靠窗口,因为可以停靠在中心部件的四周,用来放置一些部件来实现一些功能,就像个工具箱一样。一个主窗口可以拥有多个 Dock 部件。

  1. 状态栏(QStatusBar)

用于显示程序的一些状态信息,在主窗口的最底部。一个主窗口只能拥有一个状态栏。

主窗口应用

我认为 Visual Studio 的主界面是一个能够很好地展示 QMainWindow 的实际应用。大家可以直观的理解各种组件如何组成一个完整的应用程序界面。

在这里插入图片描述

接下来我们使用 QMainWindow 模仿一下这个界面。

  1. 创建 QMainWindow 工程

文件 -> New Project -> Qt Widgetd Application

在这里插入图片描述

注意:项目路径中不要包含中文

运行起来如图所示:

在这里插入图片描述

  1. 添加菜单栏

因为一个 QMainWindow 主窗口最多只有一个菜单栏,所以可以直接使用 menuBar() 获取。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    // 获取 menuBar 指针
    QMenuBar *menuBar = this->menuBar();
}

或者 New 一个 QMenuBar 对象。

QMenuBar *menuBar = new QMenuBar();
setMenuBar(menuBar);
  1. 添加菜单以及菜单项
// 创建菜单
QMenu *menuFile = new QMenu("文件(F)", this);
QMenu *menuEdit = new QMenu("编辑(E)", this);
QMenu *menuView = new QMenu("视图(V)", this);

// 菜单栏添加菜单
menuBar->addMenu(menuFile);
menuBar->addMenu(menuEdit);
menuBar->addMenu(menuView);

// 添加菜单项
QAction *actNew = new QAction("新建(N)", this);
QAction *actOpen = new QAction("打开(O)", this);
menuFile->addAction(actNew);
menuFile->addAction(actOpen);

在这里插入图片描述

  1. 添加工具栏
// 添加工具栏
QToolBar *toolBar = new QToolBar("工具栏");
addToolBar(Qt::TopToolBarArea, toolBar);
QAction *actBackUp = new QAction("后退", this);
QAction *actForward = new QAction("前进", this);
toolBar->addAction(actBackUp);
toolBar->addAction(actForward);

注意:QAction 对象是可以复用的,即可以直接使用菜单中的动作对象。

在这里插入图片描述

  1. 添加中心部件
// 添加中心部件
QLabel *label = new QLabel(this);
label->setAlignment(Qt::AlignCenter);
label->setText("这里是中心部件");
this->setCentralWidget(label);

在这里插入图片描述

  1. 添加停靠窗口
// 添加停靠窗口
QDockWidget *dockWidget = new QDockWidget("停靠窗口", this);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

在这里插入图片描述

  1. 添加状态栏
// 状态栏
QStatusBar *statusBar = this->statusBar();
statusBar->showMessage("这里是状态栏");

在这里插入图片描述

至此,我们这基本上就完成了,虽然看上去有些简陋,但是大体是有的。更多细节可以自己研究一下,例如:给工具栏中的 Action 添加图标~

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值