QT学习笔记(七)QMainWindow:实现一个简单的界面

本文详细介绍了如何在Qt环境中创建和配置窗口的各种组件,包括菜单栏(QMenuBar)、工具栏(QToolBar)、状态栏(QStatusBar)、浮动窗口(QDockWidget)以及中心部件(QTextEdit)。每个组件的创建、添加和配置方法都有清晰的代码示例,如菜单项的创建、工具栏的停靠设置和浮动窗口的位置管理等。
摘要由CSDN通过智能技术生成

一、菜单栏

  1. 一个窗口只能一个菜单栏,位于顶部。
  2. 过程:创建菜单栏->放入窗口->创建菜单->创建菜单项
  3. 库:#include <QMenuBar>
  4. 代码示例:
    //菜单栏:一个窗口只能一个菜单栏 位于顶部
    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");
  1. 效果:
    在这里插入图片描述
  2. 注释写出了每一步的含义,补充说明一下其他内容:
  • addMenu和addAction操作时,也可以不创建对象,但是若要继续使用添加的对象,就需要创建了。例如:下面两句显示的效果相同,但由于后续需要往"file"菜单里添加菜单项,所以在这里创建了一个filemenu的对象,后续再对filemenu做addAction。
QMenu * filemenu=menubar->addMenu("File");
menubar->addMenu("File");
  • 另外,可以通过查看返回类型,确定创建对象的类型,例如:
    在这里插入图片描述
    通过查看帮助文档,指导返回类型是QMenu,所以filemenu的类型为QMenu。
    同理,查到:
    在这里插入图片描述
    filemenu->addAction的返回类型是QAction,所以菜单项的类型是QAction。
  • 菜单栏对于窗口是唯一的,所以添加到窗口时是set办法(setMenuBar)。

二、状态栏

  1. 一个窗口只能一个状态栏,位于底部。
  2. 过程:创建状态->放入窗口->创建标签控件->标签放入状态栏
  3. 库:
    #include <QStatusBar>
    #include <QLabel>
  4. 代码示例:
    //状态栏 最多一个 位于底部
    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);//右侧显示
  1. 效果:左右侧分别显示了两个标签
    在这里插入图片描述
  2. 补充说明:
  • 状态栏添加的是标签,即QLabel,所以还需要添加库QLabel,
  • 标签的左右显示不是用left和right,右侧显示是addPermanentWidget
  • 状态栏对于窗口也是唯一的,所以也是用的set办法(setStatusBar)

三、工具栏

  1. 一个窗口可以有多个工具栏,可以位于四个方向
  2. 过程:创建工具栏->放入窗口->可以配置一些参数(set)->创建内容/控件->添加内容/控件
  3. 库:
    #include <QToolBar>
    #include <QPushButton>
  4. 代码示例:
   //工具栏:一个窗口可以有多个
    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);
  1. 效果:
    在这里插入图片描述
    6.补充说明:
  • 这里添加了创建的菜单项,即QAction的对象。
  • 创建了一个按钮,所以添加了QPushButton
  • 工具栏默认停靠范围是上,可以拖动停靠到上下左右四个位置,也可以浮动在画面内(即不停靠),设置了停靠范围后,工具栏将只能在停靠范围内停靠(我在说什么废话)或浮动在画面内,若关闭浮动,工具栏将只能停靠,这个位置的切换是通过鼠标拖动实现的,但若是关闭了移动功能,则工具栏静止在初始位置了。下图为工具栏的浮动示意:
    在这里插入图片描述
  • 由于一个窗口可以有多个工具栏,所以添加到窗口时采用的是add(addToolBar

四、铆接部件(浮动窗口)

  1. 一个窗口可以有多个铆接部件,可以位于四个方向
  2. 过程:创建铆接部件>放入窗口
  3. 库:#include <QDockWidget>
  4. 代码示例:
    //铆接部件(浮动窗口) 可以有多个
    QDockWidget *dockwidget=new QDockWidget("test",this);
    addDockWidget(Qt::TopDockWidgetArea,dockwidget);
  1. 效果:由于还没有添加中心,所以看不出方位
    在这里插入图片描述
    还可以拖出:

在这里插入图片描述

  1. 补充说明:
  • 由于一个窗口可以有多个铆接部件,所以添加到窗口时采用的是add(addDockWidget
  • 通过查看帮助文档,addDockWidget的使用方法如下:
    在这里插入图片描述
    可以看到有三个参数:DockWidgetAreaQDockWidgetOrientation,其中QDockWidget是创建的铆接部件,Orientation的帮助文档内容如下图,可不写、
    在这里插入图片描述DockWidgetArea,查看帮助文档:
    在这里插入图片描述
    选择一个填入就行
Qt::LeftDockWidgetArea
Qt::RightDockWidgetArea
Qt::TopDockWidgetArea
Qt::BottomDockWidgetArea
Qt::AllDockWidgetAreas
Qt::NoDockWidgetArea
  • 可以继续设置一些别的参数,如:
    //设置后期停靠区,只允许在某些位置
    dockwidget->setAllowedAreas(Qt::TopDockWidgetArea|Qt::RightDockWidgetArea);

五、中心部件

  1. 一个窗口只能由一个中心部件,位于中间
  2. 过程:创建中心部件->放入窗口
  3. 库:#include <QTextEdit>
  4. 代码示例:
    //中心部件 只能有一个
    QTextEdit *edit=new QTextEdit(this);
    setCentralWidget(edit);
  1. 效果:刚刚的浮动窗口就会显示在中心部件外围的指定位置
    在这里插入图片描述
  2. 补充说明
  • 由于中心部件也只能有一个,所以是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()
{
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值