版权声明:未经说明,禁止转载 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封装了状态栏、工具栏、状态栏等组件