QT学习 08 QMainWindow的学习

QMainWindow 是Qt框架中的一个用于创建主窗口式界面的类。它提供了一种便捷的方法来创建具有菜单、工具栏、状态栏、中心区域和可选的侧边栏等元素的应用程序主窗口。
QMainWindow的布局

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操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值