目录
  1. 一、QMainWindow
  2. 1.1 QMainWindow结构概览
  3. 1.2 菜单栏QMenuBar
  4. 1.3 工具栏QToolBar
  5. 1.4 状态栏QStatusBar
  6. 1.5 铆接部件QDockWidget
  7. 1.6 中心部件QTextEdit
  8. 1.7 UI工具设计图形界面
  9. 二、资源文件
  10. 2.1 资源文件的导入
  11. 2.2 代码中使用

一、QMainWindow

1.1 QMainWindow结构概览

QMainWindow由一个菜单栏、多个工具栏、多个铆接部件、一个状态栏、一个中心部件组成。各部件的具体布局区域如图所示。

QMainWindow结构概览

QMainWindow结构概览 (2)

上面图片所用到的代码及注释附在本文的最后

1.2 菜单栏QMenuBar

菜单栏是窗口最上方的区域,基本每个软件的标题栏下面都会有这么一行,这就是菜单栏。

菜单栏QMenuBar

注意:菜单栏只能创建一个

代码示例

引入菜单栏QMenuBar

#include <QMenuBar>

菜单栏创建

QMenuBar * bar = menuBar();

将菜单栏放入到窗口中

setMenuBar(bar);

创建菜单栏的菜单(比如文件、编辑、工具、帮助等)

QMenu * fileMenu = bar->addMenu("文件");
QMenu * editMenu = bar->addMenu("编辑");

创建菜单项(比如文件菜单下的新建、打开项)

QAction * newAction = fileMenu->addAction("新建");
//添加分割线
fileMenu->addSeparator();
QAction * openAction = fileMenu->addAction("打开");

菜单栏QMenuBar (2)

1.3 工具栏QToolBar

工具栏一般位于菜单栏下方,或者左右两侧、或底部。

工具栏QToolBar

注意:工具栏可以创建多个。

代码示例

引入工具栏头文件

#include <QToolBar>

创建工具栏(工具栏创建后可以随意拖动)

QToolBar * toolBar = new QToolBar(this);

将工具栏放入窗口,Qt::TopToolBarArea是默认放上侧,以此类推。

addToolBar(Qt::LeftToolBarArea,toolBar);

设置只允许左右停靠

toolBar->setAllowedAreas( Qt::LeftToolBarArea | Qt::RightToolBarArea );

设置浮动(可以拖拽,但移动不了)

toolBar->setFloatable(false);

设置移动(总开关,设为False后无法拖拽)

toolBar->setMovable(false);

在工具栏中添加内容

//将刚才创建的菜单项Action添加到工具栏中
toolBar->addAction(newAction);
//添加分割线
toolBar->addSeparator();
//添加另一个菜单项
toolBar->addAction(openAction);
//工具栏中添加控件
QPushButton * btn = new QPushButton("aa" , this);
toolBar->addWidget(btn);

工具栏QToolBar (2)

1.4 状态栏QStatusBar

状态栏是窗口最低不,显示软件状态的栏。(例如ppt、word最下面显示字数、幻灯片数量的那一行)

状态栏QStatusBar

注意:状态栏最多有一个。

代码示例

引入状态栏头文件

#include <QStatusBar>

创建状态栏

QStatusBar * stBar = statusBar();

将状态栏设置到窗口

setStatusBar(stBar);

在菜单栏中放入标签控件

//引入头文件
#include <QLabel>
QLabel * label = new QLabel("提示信息",this);
stBar->addWidget(label);

QLabel * label2 = new QLabel("右侧提示信息",this);
stBar->addPermanentWidget(label2);

状态栏QStatusBar (2)

1.5 铆接部件QDockWidget

铆接部件又称为浮动窗口,是窗口中,在中心窗口周围的部件,通常是可以修改位置,可以拖出来成为单独的窗口,也可以双击使其回到父窗口中。

常见的铆接部件包括(IDE左侧或右侧的项目栏、底部的编译输出栏等)

铆接部件QDockWidget

铆接部件可以有多个

代码示例

引入头文件

#include <QDockWidget>

创建铆接部件

QDockWidget * dockWidget = new QDockWidget("浮动",this);

将铆接部件添加到窗口中

addDockWidget(Qt::BottomDockWidgetArea,dockWidget);

设置铆接部件的停靠区域,例如只允许上下(与工具栏设置参数一致)

dockWidget->setAllowedAreas( Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea );

铆接部件QDockWidget (2)

1.6 中心部件QTextEdit

中心部件就是一个程序中心的部分,例如IDE的程序编写区域,WPS的文字编辑区域等。

中心部件只能设置一个。

代码示例

引入头文件

#include <QTextEdit>

创建中心部件

QTextEdit * edit = new QTextEdit(this);

设置中心部件到父窗口

setCentralWidget(edit);

QMainWindow结构概览 (2)

中间白色的区域就是中心部件。

1.7 UI工具设计图形界面

在Qt中也提供了图形化的UI设计界面。

通过双击项目文件中的xxx.ui文件,就可以打开设计页面。

UI工具设计图形界面

在这里,上文提到的所有项目(菜单栏、工具栏等),以及各自的属性,都可以直接拖拽放置,并在右下角修改其属性。

创建的控件,在代码中通过ui->abcd可以找到所有控件。

但是这种布局方式所产生的代码结构较差。

通常是在代码中编写大概,然后在设计中进行微调。

二、资源文件

很多时候,在窗口中我们不仅需要文字,还需要添加一些图标,图片等,让应用显得更人性化。这就需要我们在项目中导入资源文件。

2.1 资源文件的导入

  1. 首先将图片复制到项目文件夹中(注意图片必须是png格式,直接更改用户名无效,必须通过图片编辑软件转换)

  2. 右键项目名 -> 添加新文件 -> Qt -> QtResourceFile

资源文件的导入

  1. 得到一个.qrc文件,右键,open in edit

  2. 添加 -> 前缀,自己设置一个前缀

  3. 添加 -> 文件 -> 找到图片文件夹 -> 选中所有图片 -> 打开

  4. 可以看到.qrc文件下方多了一个“前缀”文件夹

2.2 代码中使用

代码中使用示例如下:

`ui->actionNew->setIcon(QIcon(``":/前缀/图片文件夹名/图片文件名.png"``));`

//mainwindow.cpp

#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 * bar = menuBar();
    //将菜单栏放入到窗口中
    setMenuBar(bar);

    //创建菜单
    QMenu * fileMenu = bar->addMenu("文件");
    QMenu * editMenu = bar->addMenu("编辑");

    //创建菜单项
    QAction * newAction = fileMenu->addAction("新建");
    //添加分割线
    fileMenu->addSeparator();
    QAction * openAction = fileMenu->addAction("打开");




    //工具栏  可以有多个
    QToolBar * toolBar = new QToolBar(this);
    addToolBar(Qt::LeftToolBarArea,toolBar);

    //后期设置 只允许 左右停靠
    toolBar->setAllowedAreas( Qt::LeftToolBarArea | Qt::RightToolBarArea );

    //设置浮动
    toolBar->setFloatable(false);

    //设置移动 (总开关)
    toolBar->setMovable(false);

    //工具栏中可以设置内容
    toolBar->addAction(newAction);
    //添加分割线
    toolBar->addSeparator();
    toolBar->addAction(openAction);
    //工具栏中添加控件
    QPushButton * btn = new QPushButton("aa" , this);
    toolBar->addWidget(btn);


    //状态栏 最多有一个
    QStatusBar * stBar = statusBar();
    //设置到窗口中
    setStatusBar(stBar);
    //放标签控件
    QLabel * label = new QLabel("提示信息",this);
    stBar->addWidget(label);

    QLabel * label2 = new QLabel("右侧提示信息",this);
    stBar->addPermanentWidget(label2);

    //铆接部件 (浮动窗口) 可以有多个
    QDockWidget * dockWidget = new QDockWidget("浮动",this);
    addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
    //设置后期停靠区域,只允许上下
    dockWidget->setAllowedAreas( Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea );


    //设置中心部件 只能一个
    QTextEdit * edit = new QTextEdit(this);
    setCentralWidget(edit);
}

MainWindow::~MainWindow()
{

}