#include "mainwindow.h"
#include <QPushButton>
#include <QLabel>
/*-------------------------*/
#include <QMenuBar> // 菜单栏
#include <QMenu> // 菜单
#include <QAction> // 菜单项
#include <QDebug>
/*-------------------------*/
#include <QToolBar> // 工具栏
/*-------------------------*/
#include <QStatusBar> // 状态栏
/*-------------------------*/
#include <QDockWidget> // 铆接部件
/*-------------------------*/
#include <QTextEdit> // 核心部件: 编辑器
/*-------------------------*/



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // 第一部分: 5.1 菜单栏
    //**********窗口属性设置*****************
    this->setWindowTitle("主窗口");
    this->setFixedSize(800, 600);

    //***********创建菜单栏******************
    //创建菜单栏
    //注意：如果只有菜单栏，则在窗口处没有现象
    QMenuBar *menu_bar = new QMenuBar(this);
    this->setMenuBar(menu_bar);

    // 创建菜单
    QMenu *menu1 = new QMenu("文件",this);
    menu_bar->addMenu(menu1);

    QMenu *menu2 = new QMenu("编辑",this);
    menu_bar->addMenu(menu2);

    QMenu *menu3 = new QMenu("构建",this);
    menu_bar->addMenu(menu3);

    // 创建菜单项
    QAction *act1 = new QAction("新建文件或项目",this);
    menu1->addAction(act1);

    QAction *act2 = new QAction("打开文件或项目",this);
    menu1->addAction(act2);

    // 添加分隔线
    menu1->addSeparator();

    QAction *act3 = new QAction("保存", this);
    menu1->addAction(act3);

    QAction *act4 = new QAction("另存为", this);
    menu1->addAction(act4);

    QAction *act5 = new QAction("复制", this);
    act5->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_C)); // 绑定快捷键
    menu2->addAction(act5);

    QAction *act6 = new QAction("粘贴", this);
    act6->setShortcut(QKeySequence(tr("Ctrl+V")));
    menu2->addAction(act6);

    QAction *act7 = new QAction("剪切", this);
    menu2->addAction(act7);

    // 当单机菜单项时，做出相应的处理
    connect(act5,&QAction::triggered,[=]()->void{
        qDebug()<<"复制正在执行";
    });

    connect(act6,&QAction::triggered,[=]()->void{
        qDebug()<<"粘贴正在执行";
    });



    // 第二部分: 5.2 工具栏
    //创建工具栏
    //注意：工具栏可以添加多个
    QToolBar *toolbar = new QToolBar(this);
    //将工具栏添加到窗口
    //    this->addToolBar(toolbar);//默认在最上面显示
    this->addToolBar(Qt::LeftToolBarArea, toolbar); //设置默认在左边显示

    //工具栏添加菜单项和分割线
    QAction *act_tool1 = new QAction("欢迎", this);
    QAction *act_tool2 = new QAction("编辑", this);
    toolbar->addAction(act_tool1);
    toolbar->addSeparator();
    toolbar->addAction(act_tool2);

    //设置工具栏的浮动状态，true：可以悬浮在窗口 false：不可以
    toolbar->setFloatable(true);
    //设置运行工具栏的位置，设置为左边或者右边
    toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea | Qt::TopToolBarArea | Qt::BottomToolBarArea);


    // 第三部分: 5.3 状态栏
    //创建状态栏
    //状态栏只能有一个
    QStatusBar *statusbar = new QStatusBar(this);
    //添加状态栏
    this->setStatusBar(statusbar);

    //给状态栏中添加文字信息或者按钮=
    QLabel *label1 = new QLabel("左边信息", this);
    statusbar->addWidget(label1);

    QLabel *label2 = new QLabel("右边信息", this);
    statusbar->addPermanentWidget(label2);

    QPushButton *button = new QPushButton("设置", this);
    statusbar->addWidget(button);


    // 第四部分: 5.4 铆接部件 QDockWidget，也称浮动窗口，可以有多个。
    //创建铆接部件
    QDockWidget *dockwidget = new QDockWidget("这是一个铆接部件", this);
    this->addDockWidget(Qt::TopDockWidgetArea, dockwidget);


    // 第五部分: 5.5 核心部件（中心部件）
    // 除了以上几个部件，中心显示的部件都可以作为核心部件，例如一个记事本文件，可以利用QTextEdit 做核心部件
    QTextEdit *edit = new QTextEdit("文本编辑器", this);
    this->setCentralWidget(edit);
}

MainWindow::~MainWindow()
{
}

