Qt学习之路18--主窗口QMainWindow之菜单栏QMenubar

版权声明:未经说明,禁止转载 https://blog.csdn.net/tqs_1220/article/details/82056029

什么是主窗口?

主窗口通常是应用程序启动后显示的第一个窗口,是与用户进行长时间交互的顶层窗口,因为绝大的功能都是由主窗口进行提供,还有部分功能由对话框提供。
在Qt中直接支持主窗口的概念,QMainWindow类是所有主窗口的基类,它是继承自QWidget的容器类型组件,是一个顶层组件,只能以窗口的形式存在,不能作为其他组件的子组件。
这里写图片描述

QMainWindow类作为窗口类的基类,那么它里面又封装了些什么,或者说基本的主窗口都由哪些部件构成。
这里写图片描述
把图片样式一放上来仿佛就明白了什么是主窗口了,就是常用的应用程序的主界面了,Windows开发者最常见的就是VS开发环境了,主体窗口包含最顶部的菜单栏,下一层的快捷工具栏、使用最多的中心组件、停靠组件(比如VS中的解决方案窗口、调用堆栈窗口等摆放在中心组件周围的组件)以及最底部的状态栏。
这里写图片描述
QMainWindow布局中带有菜单栏(QMenuBar),而菜单栏又包含多个菜单,每个菜单里有一个下拉菜单组(QMenu),一个下拉菜单组中包含多个菜单项(QAction)。通过层层嵌套的方式就构成了菜单栏。

那么如何在Qt中创建菜单呢?

QMenuBar *mb = menuBar();//菜单栏被封装在主窗口中,如果建立了主窗口,就可以直接调用成员函数获得菜单栏对象
QMenu *menu = new QMenu("File(&F)");//创建一个下拉菜单组
QAction *action = new QAction("Print", NULL);//创建一个菜单项,第二个参数是指定父组件
menu->addAction(action);//往下拉菜单组中添加菜单项
mb->addMenu(menu);//往菜单栏中添加菜单

两个小技巧

为菜单项设置快捷键

action->setShortcut(QKeySequence(KEY));

setshortcut函数是QAction类里面的函数
目的是为菜单项设置快捷键。
快捷键通过QKeySequence类对象指定。
KEY表示键值常量,属于Qt内置定义的一系列整型常量

为下拉菜单组设置分割线

 menu->addSeparator();

addSeparator函数是QMenu类里面的函数
目的是分隔菜单项。

创建主窗口和菜单栏

编写自定义的创建QAction对象函数,附带设置快捷键功能

//action为引用,引用对象为指针
//key为快捷键的键值
void makeAction(QAction*& action, QString text, int key)
{
    action = new QAction(text, NULL);
    action->setShortcut(QKeySequence(key));//设置快捷键
}

创建一个下拉菜单组

void initMenu(QMenuBar* mb)//传入参数是菜单栏对象
{
    QMenu* menu = new QMenu("File(&F)");
    QAction* action = NULL;

    makeAction(action, "New(N)", Qt::CTRL + Qt::Key_N);
    menu->addAction(action);    // add Action item to Menu

    menu->addSeparator();

    makeAction(action, "Exit(X)", Qt::CTRL + Qt::Key_X);
    menu->addAction(action);    // add Action item to Menu

    mb->addMenu(menu);    // add Menu to application MenuBar
}

在主窗口的菜单栏中使用下拉菜单组

//MainWindow类继承自QMainWindow类
MainWindow::MainWindow()
{
    QMenuBar* mb = menuBar();
    initMenu(mb);
}

这里写图片描述
菜单组中的菜单项之间是带有分割线的。

根据上述方式可以对主窗口添加其他的菜单。
这里写图片描述

小结

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

猜你喜欢

转载自blog.csdn.net/tqs_1220/article/details/82056029