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

什么是主窗口?

主窗口通常是应用程序启动后显示的第一个窗口,是与用户进行长时间交互的顶层窗口,因为绝大的功能都是由主窗口进行提供,还有部分功能由对话框提供。
在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封装了状态栏、工具栏、状态栏等组件
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的控件和功能,使得开发者可以轻松创建专业的图形界面应用程序。 在Qt,可以通过使用QWidget或QMainWindow作为应用程序的窗口,同时使用QMenu或QMenuBar作为菜单栏。如果希望左侧菜单栏展开时右侧界面能够随之移动,可以使用QVBoxLayout或QHBoxLayout来实现界面布局。 首先,创建一个QWidget或QMainWindow的实例作为窗口。然后,创建一个QMenu或QMenuBar的实例作为菜单栏,并将其添加到窗口。接下来,创建一个QWidget的实例作为右侧界面,并将其添加到窗口。 对于左侧菜单栏,可以使用QVBoxLayout来实现垂直布局。将QMenu或QMenuBar实例以及其他需要展示的菜单项添加到QVBoxLayout。为了实现菜单展开时右侧界面随之移动,可以使用QStackedWidget作为右侧界面的容器,并将其他界面作为QStackedWidget的子widget添加到其。 当左侧菜单栏的某个菜单项被点击时,可以通过设置QStackedWidget的当前显示的widget来实现界面的切换,从而实现右侧界面随之移动的效果。 总结起来,通过使用QVBoxLayout、QMenu或QMenuBar、QStackedWidget以及其他必要的widget和布局控件,可以实现Qt左侧菜单栏展开时右侧界面随之移动的效果。具体的实现可以根据具体的需求和设计来进行调整和优化。 ### 回答2: Qt左侧菜单栏展开右侧界面随之移动是指,在Qt界面,左侧有一个菜单栏,当用户点击菜单项时,右侧的界面会随之改变并移动位置。 实现这个功能可以采用Qt的布局机制和信号槽机制。首先,在设计界面时,将左侧菜单栏和右侧界面放入一个整体的布局,可以使用Qt提供的QVBoxLayout或QHBoxLayout。然后,将左侧菜单栏每个菜单项都连接到一个对应的槽函数。 在槽函数,可以通过修改右侧界面所在的QWidget对象的位置和大小来实现移动。可以通过设置QWidget的geometry函数来改变位置和大小,或者使用Qt的动画机制来实现平滑过渡效果。 具体实现时,可以将右侧界面设计为多个QWidget对象的堆叠布局,每个菜单项对应一个QWidget对象,通过切换当前显示的QWidget对象来改变右侧界面的内容。当某个菜单项被点击时,触发相应的槽函数,槽函数通过设置当前QWidget对象的位置和大小,使其显示在正确的位置。 需要注意的是,当设置右侧界面的位置和大小时,要考虑到左侧菜单栏的宽度,避免遮挡或者出现重叠的情况。可以通过设置边距或者调整布局的大小来实现合适的效果。 总结起来,实现Qt左侧菜单栏展开右侧界面随之移动的功能,需要使用Qt的布局和信号槽机制,将界面进行合理的布局,通过连接菜单项的槽函数来修改右侧界面的位置和大小,实现菜单展开和右侧界面移动的效果。 ### 回答3: Qt 左侧菜单栏展开右侧界面随之移动的实现可以通过使用 Qt 的布局管理器和信号槽机制来完成。 首先,可以使用 QVBoxLayout 将左侧菜单栏的按钮放置在一个垂直布局。接下来,创建一个右侧部件的 QWidget,它将作为要显示区域。 当左侧菜单栏的按钮被点击时,可以通过绑定信号和槽的方式实现界面的切换和移动。可以使用 QStackedLayout 来管理右侧部件的隐藏和显示,以便在切换界面时具有平滑的过渡效果。 具体来说,可以创建一个槽函数,当左侧菜单栏按钮被点击时,该函数会将相应的右侧部件切换为可见状态,并将其它部件隐藏起来。然后,可以使用布局管理器的方法在界面之间进行平滑的过渡移动,例如 setGeometry() 函数。 在实现过程,需要为左侧菜单栏的按钮设置信号和槽,以便在点击按钮时触发切换界面的事件。可以使用按钮的 clicked() 信号来连接槽函数。 总结起来,实现 Qt 左侧菜单栏展开右侧界面随之移动的效果,需要使用 Qt 的布局管理器和信号槽机制,通过切换界面和调整界面的布局来实现移动效果。这样,当点击左侧菜单栏的按钮时,右侧界面将会平滑地移动和展开。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值