QT开发(二十二)——QMainWindow主窗口

一、主窗口简介

    应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成。

    QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件。

    QMainWindow内部封装了菜单栏、工具栏、中心组件、停靠组件、状态栏等。       

    QMainWindow内置了布局管理器,基本的组件布局如下:

wKioL1glpd_zMhFjAAAwa6zVz9o174.png

二、菜单栏

QT中提供了预定义的与菜单相关的类组件,菜单栏QMenuBar,下拉菜单QMenu,菜单项QAction。

wKiom1glpf6glCWaAACpyc1o3iY491.png

    QMenuBar* mb = menuBar();

    QMenu* menu = new QMenu("File(&F)");

    QAction *action = new QAction(text, NULL);

    menu->addAction(action);

    mb->addMenu(menu);

快捷键设置

     action->setShortcut(QKeySequence(KEY));

    QKeySequence是QT中与快捷键相关的类,KEY是QT中代表键值的常量。

三、工具栏

工具栏是应用程序中集成各种功能使用快捷方式的区域,不是应用程序必须存在的组件,工具栏的元素可以是各种窗口组件,但通常以图标按钮的方式存在。

    QT中提供了预定义的工具栏相关组件,工具栏QToolBar和快捷项QAction。

wKiom1glph3SczzfAACF2kKVHlg863.png

1、工具栏使用方法

    //创建工具栏

    QToolBar *tb = addToolBar("ToolBar");

        //创建工具栏选项

        QAction *action = new QAction("", NULL);

    action->setToolTip(Open);

    action->setIcon(QIcon(/res/pic/open.png));

        //将工具栏选项加入工具栏

    tb->addAction(action);

2QToolBar实用函数

    void setFloatable(bool floatable)    设置工具栏为浮动

    void setMovable(bool movable)    设置工具栏为可移动

    void setIconSize(const QSize & iconSize)    设置工具栏的图标大小

3、工具栏实例

    QTollBar组件中可以加入QT中的任意QWidget组件。

     QToolBar* tb = addToolBar("Tool Bar");

    QAction* action = new QAction("", NULL);

 

    tb->setFloatable(false);

    tb->setMovable(false);

 

    action->setToolTip("Open");

    action->setIcon(QIcon(":/Res/open.png"));

 

    tb->addAction(action);

 

    QPushButton* b = new QPushButton("Button");

    QLabel* l = new QLabel("Label");

    QLineEdit* e = new QLineEdit();

 

    tb->addWidget(b);

    tb->addWidget(l);

    tb->addWidget(e);

四、状态栏

    状态栏是应用程序中输出简要信息的区域,一般位于窗口的底部。状态栏显示的消息类型如下:

A、实时消息,如当前程序状态

B、永久消息,如程序版本,开发机构

C、进度消息,进度显示

QT中提供了预定义的状态栏相关组件状态栏QStatusBar,QStatusBar是容器型组件,可以是任意组件QWidget的父组件。

wKiom1glpj7RdsgYAABSeazyFAg766.png

QT状态栏的一般设计原则:

A、状态栏左边区域用于输出实时消息

B、状态栏右边区域用于输出永久消息

因此,addWidget函数用于在状态栏左边区域添加组件,addPermanentWidget函数用于在状态栏右边区域添加组件。

状态栏使用方法如下:

 QStatusBar* sb = statusBar();

    QLabel* label = new QLabel("CopyRight @ Scorpio Studio 2016");

    if( label != NULL )

    {

        line.setMinimumWidth(120);

        line.setAlignment(Qt::AlignCenter);

        line.setText("Ln: 1    Col: 1");

        label->setMinimumWidth(160);

        label->setAlignment(Qt::AlignCenter);

        sb->addPermanentWidget(new QLabel());

        sb->addPermanentWidget(&line);

        sb->addPermanentWidget(label);

    }

五、文本编辑组件

    QT中预定义了三种文本编辑组件,用于满足不同的开发需求。

    A、QLineEdit单行文本编辑组件

    B、QTextEdit多行富文本编辑组件

    C、QPlainTextEdit多行普通文本编辑组件

    QT文本编辑组件的类继承图:

wKioL1glpl-i5t0pAAB15EH9KoY622.png

QT中的文本编辑组件内置了右键弹出和快捷键功能。

文本编辑器的使用:

//设置文本编辑器的父组件

    mainEditor.setParent(this);

//设置文本编辑器为中央组件

    setCentralWidget(&mainEditor);