一、主窗口的概念

应用程序中的主窗口
主窗口是与用户进行长时间交互的顶层窗口
程序的绝大多数直接由主窗口提供
主窗口通常是应用程序启动后显示的第一个窗口
整个程序由一个主窗口和多个对话框组成

QT中的主窗口
Qt开发平台中直接支持主窗口的概念
QMianWindow是Qt中主窗口的基类
QMainWindow继承于QWidget是一种容器类型的组件
image.png

QMainWindow中的封装
1.菜单栏
2.工具栏
3.中心组件
4.停靠组件
5.状态栏
image.png
在Qt中提供与菜单相关的类组件
image.png
在Qt主窗口中创建菜单
image.png

二、编程实验 主窗口中创建菜单 NotePad.pro

#include "MainWindow.h"
#include <QMenu>

MainWindow::MainWindow()
{

}

MainWindow* MainWindow::NewInstance()
{
    MainWindow* ret = new MainWindow();

    if( (ret == NULL) || !ret->construct() )
    {
        delete ret;
        ret = NULL;
    }

    return ret;
}

bool MainWindow::construct()
{
    bool ret = true;

    ret = ret && initMenuBar();

    return ret;
}

bool MainWindow::initMenuBar() //
{
    bool ret = true;
    QMenuBar* mb = menuBar();

    ret = ret && initFileMenu(mb);

    return ret;
}

bool MainWindow::initFileMenu(QMenuBar* mb)  //下拉菜单
{
    QMenu* menu = new QMenu("File(&F)");  //
    bool ret = (menu != NULL);    //是否创建成功

    if( ret )
    {
        QAction* action = NULL;

        ret = ret && makeAction(action, "New(N)", Qt::CTRL + Qt::Key_N);  //下拉菜单的每个选项

        if( ret )
        {
            menu->addAction(action);    // add Action item to Menu
        }

        menu->addSeparator();

        ret = ret && makeAction(action, "Exit(X)", Qt::CTRL + Qt::Key_X);

        if( ret )
        {
            menu->addAction(action);    // add Action item to Menu
        }
    }

    if( ret )
    {
        mb->addMenu(menu);    // add Menu add to application Menu Bar将下拉菜单加入到菜单栏里面
    }
    else
    {
        delete menu;
    }


    return ret;
}

bool MainWindow::makeAction(QAction*& action, QString text, int key)   //
{
    bool ret = true;

    action = new QAction(text, NULL);  //创建action对象

    if( action != NULL )
    {
        action->setShortcut(QKeySequence(key));
    }
    else
    {
        ret = false;
    }

    return ret;
}

MainWindow::~MainWindow()
{
    
}

快捷键设置

action->setshortcut(QkeySequence(KEY))

QkeySequence -Qt中与快捷键相关的类
KEY -Qt中代表键值的常亮

三、小结

主窗口是与用户进行长时间交互的顶层窗口
主窗口通常是应用程序启动后显示的第一个窗口
QmainWindow是Qt中主窗口的基类
QMainWindow是一种容器类型的窗口组件
QMainWindow中封装了菜单栏,工具栏,状态栏等组件


YingLi
6 声望4 粉丝

From zero to hero.