文章目录

  • 详细说明
    • 操作(Actions)
    • 基于Cocoa的Qt构建macOS上的QMenu
  • 属性
  • 公共函数
    • 构造和析构
    • 属性相关
    • 活动和默认操作
    • 位置上的操作和操作的几何大小
    • 添加操作项
    • 增加子菜单
    • 增加部分
    • 增加分割线
    • 分离式菜单
    • 清空
    • 显示
    • macOS相关
  • 重写的公共函数
  • 信号
  • 静态的公共函数
  • 受保护的函数
  • 重写的受保护的函数
  • 相关代码
  • 参考

QMenu Class

QMenu类提供了一个用于菜单栏、上下文菜单和其他弹出菜单的菜单小部件。

Header #include < QLineEdit >
qmake QT += widgets
Inherits QWidget
Inherited By

详细说明

菜单小部件是一个选择菜单。它可以是菜单栏中的下拉菜单,也可以是独立的上下文菜单。当用户单击相应的项目或按指定的快捷键时,下拉菜单由菜单栏显示。使用QMenuBar::addMenu() 将菜单插入菜单栏。上下文菜单通常由一些特殊的键盘键或右键单击来调用。它们可以通过popup() 异步执行,也可以通过exec() 同步执行。菜单也可以响应按钮的按下而被调用;除了如何调用它们之外,它们与上下文菜单一样。

操作(Actions)

菜单由操作项列表组成。操作是通过addAction() 、addActions() 和insertAction() 函数添加的。操作是垂直表示的,并由QStyle呈现。此外,操作可以有文本标签、在最左侧绘制的可选图标和快捷键序列,如“Ctrl+X”。

菜单中的现有操作可以通过actions() 找到。

有四种操作项:分隔符、显示子菜单的操作、小部件和执行操作的操作。分隔符与addSeparator() 一起插入,子菜单与addMenu() 一起插入,所有其他项都被视为操作项。

当插入操作项时,您通常指定一个接收器和一个插槽。当项目被 triggered() 时,接收者将被通知。此外,QMenu提供了两个信号,triggered()和hover(),它们向从菜单中触发的QAction发出信号。

使用clear() 清除菜单,并使用removeAction() 删除单个操作项。

QMenu也可以提供分离式菜单。分离式菜单是一个顶层窗口,它包含菜单的副本。这使得用户可以“tear off”经常使用的菜单,并将它们放置在屏幕上一个方便的位置。如果您希望将此功能用于特定菜单,可以使用setTearOffEnabled()插入一个分离句柄。当使用分离式菜单时,请记住,这个概念通常不会在微软Windows上使用,所以一些用户可能不熟悉它。考虑使用QToolBar代替。

小部件可以通过QWidgetAction类插入菜单。这个类的实例用于保存小部件,并通过采用QAction的addAction() 重载插入到菜单中。如果QWidgetAction触发triggered() 信号,菜单将关闭。

警告:要使QMenu在屏幕上可见,应使用exec() 或popup() 而不是show() 。

基于Cocoa的Qt构建macOS上的QMenu

QMenu只能在菜单/菜单栏中插入一次。后续的插入将没有效果,或者将导致禁用菜单项。

有关如何在应用程序中使用QMenuBar和QMenu的示例,请参阅菜单示例。

重要的继承函数:addAction()、removeAction()、clear()、addSeparator()和addMenu()。

属性

  1. icon: QIcon 菜单的图标

    这相当于menuAction() 的QAction::icon属性。

    默认情况下,如果未显式设置图标,则此属性包含空图标。

    访问功能:

    • QIcon icon() const
    • void setIcon(const QIcon &icon)

  2. separatorsCollapsible: bool 是否应折叠连续分隔符

    此属性指定是否应将菜单中的连续分隔符可视地折叠为单个分隔符。菜单开头或结尾的分隔符也被隐藏。
    默认情况下,此属性为true。

    访问功能:

    • bool separatorsCollapsible() const
    1. void setSeparatorsCollapsible(bool collapse)

  3. tearOffEnabled: bool 菜单是否支持撕开
    如果为true,则菜单包含一个特殊的删除项(通常在菜单顶部显示为虚线),该项在触发菜单时创建菜单的副本。
    这个“撕下来的”拷贝放在一个单独的窗口中。它包含与原始菜单相同的菜单项,除了可拆卸手柄。
    默认情况下,此属性为false。

    访问功能:

    • bool isTearOffEnabled() const
    1. void setTearOffEnabled(bool)

  4. title: QString 菜单的标题

    访问功能:

    • QString title() const
    1. void setTitle(const QString &title)
  5. toolTipsVisible: bool 菜单操作的工具提示是否应可见
    此属性指定操作菜单项是否显示其工具提示。
    默认情况下,此属性为false。

    访问功能:

    • bool toolTipsVisible() const
    1. void setToolTipsVisible(bool visible)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STbUFyxa-1611892586591)(https://gitee.com/shenjiguicang/test/raw/master/images/20210129103334.png)]

公共函数

构造和析构

  1. QMenu(const QString &title, QWidget *parent = nullptr)
  2. QMenu(QWidget *parent = nullptr)
  3. virtual ~QMenu()

属性相关

  1. QIcon icon() const
  2. void setIcon(const QIcon &icon)
  3. bool separatorsCollapsible() const
  4. void setSeparatorsCollapsible(bool collapse)
  5. bool isTearOffEnabled() const
  6. void setTearOffEnabled(bool)
  7. QString title() const
  8. void setTitle(const QString &title)
  9. bool toolTipsVisible() const
  10. void setToolTipsVisible(bool visible)

活动和默认操作

  1. QAction * activeAction() const
  2. void setActiveAction(QAction *act)
  3. QAction * defaultAction() const
  4. void setDefaultAction(QAction *act)

位置上的操作和操作的几何大小

  1. QAction * actionAt(const QPoint &pt) const
  2. QRect actionGeometry(QAction *act) const

添加操作项

便利函数使用文本创建新操作。函数将新创建的操作添加到菜单的操作列表中,并返回它。
QMenu拥有返回的QAction的所有权。

  1. QAction * addAction(const QString &text)
  2. QAction * addAction(const QIcon &icon, const QString &text)
  3. QAction * addAction(const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
  4. QAction * addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
  5. QAction * addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
  6. QAction * addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
  7. QAction * addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
  8. QAction * addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)

增加子菜单

添加子菜单。它返回menu的menuAction() 。此容器菜单不拥有子菜单的所有权。

  1. QAction * addMenu(QMenu *menu)
  2. QMenu * addMenu(const QString &title)
  3. QMenu * addMenu(const QIcon &icon, const QString &title)
  4. QAction * insertMenu(QAction *before, QMenu *menu)
  5. QAction * menuAction() const 返回与此菜单关联的操作

增加部分

创建一个新的部分操作,即QAction::isSeparator() 返回true但同时具有文本提示的操作,并将新操作添加到此菜单的操作列表中。它返回新创建的操作。

QMenu拥有返回的QAction的所有权。

  1. QAction * addSection(const QString &text)
  2. QAction * addSection(const QIcon &icon, const QString &text)
  3. QAction * insertSection(QAction *before, const QString &text)
  4. QAction * insertSection(QAction *before, const QIcon &icon, const QString &text)

增加分割线

  1. QAction * addSeparator()
  2. QAction * insertSeparator(QAction *before)

分离式菜单

  1. void hideTearOffMenu()
  2. bool isTearOffMenuVisible() const
  3. void showTearOffMenu()
  4. void showTearOffMenu(const QPoint &pos)

清空

  1. void clear()
  2. bool isEmpty() const

显示

  1. QAction * exec() 同步显示

  2. QAction * exec(const QPoint &p, QAction *action = nullptr)

    exec(QCursor::pos()); 当前鼠标位置

    exec( somewidget.mapToGlobal( QPoint(0,0) ) ); 与小部件对齐

    exec(e->globalPos()); 对QMouseEvent* e的反应

  3. void popup(const QPoint &p, QAction *atAction = nullptr) 异步显示

macOS相关

  1. void setAsDockMenu() 通过单击应用程序停靠图标选项,将此菜单设置为可用的停靠菜单。在macOS上可用。
  2. NSMenu * toNSMenu() 返回此菜单的本机NSMenu。仅在macOS上可用

重写的公共函数

  1. virtual QSize sizeHint() const override

信号

  1. void aboutToHide() 将要隐藏

  2. void aboutToShow() 将要显示

  3. void hovered(QAction *action) 此信号在高亮显示菜单操作时发出
    操作是导致发出信号的操作。这通常用于更新状态信息。

  4. void triggered(QAction *action) 此信号在触发此菜单中的操作时发出
    动作是导致发出信号的动作。

    通常,您会将每个菜单操作的triggered() 信号连接到它自己的自定义槽,但有时您会希望将多个操作连接到单个槽,例如,当您有一组密切相关的操作时,例如“left justify”、“center”、“right justify”。

    注意:此信号是为层次结构中的主父菜单发出的。因此,只有父菜单需要连接到插槽;子菜单不需要连接。

静态的公共函数

  1. QAction * exec(QList<QAction *> actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr)

受保护的函数

  1. int columnCount() const
  2. void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

重写的受保护的函数

  1. virtual void actionEvent(QActionEvent *e) override
  2. virtual void changeEvent(QEvent *e) override
  3. virtual void enterEvent(QEvent *) override
  4. virtual bool event(QEvent *e) override
  5. virtual bool focusNextPrevChild(bool next) override
  6. virtual void hideEvent(QHideEvent *) override
  7. virtual void keyPressEvent(QKeyEvent *e) override
  8. virtual void leaveEvent(QEvent *) override
  9. virtual void mouseMoveEvent(QMouseEvent *e) override
  10. virtual void mousePressEvent(QMouseEvent *e) override
  11. virtual void mouseReleaseEvent(QMouseEvent *e) override
  12. virtual void paintEvent(QPaintEvent *e) override
  13. virtual void timerEvent(QTimerEvent *e) override
  14. virtual void wheelEvent(QWheelEvent *e) override

相关代码

#include <QtWidgets>
int main(int argc, char *argv[])
{QApplication::setStyle (QStyleFactory::create ("fusion")); //windowsvista fusionQApplication app(argc,argv);app.setApplicationName ("QMenu");QMainWindow w0;QMenu *menuFile = new QMenu("File",&w0);menuFile->addAction ("打开");menuFile->addSeparator ();menuFile->addSection ("保存操作");menuFile->addAction ("保存");menuFile->addAction ("另存为...");menuFile->setToolTipsVisible (true);w0.menuBar ()->addMenu (menuFile);QLabel *label = new QLabel(&w0);label->setMargin (10);label->setStyleSheet ("color:blue");label->setText ("\n\n\nQMenu *menuFile = new QMenu(\"File\",&w0); \n""menuFile->addAction (\"打开\")->setToolTip (\"Open\");\n""menuFile->addAction (\"保存\")->setToolTip (\"Save\");\n""menuFile->addSeparator ();\n\n""menuFile->setToolTipsVisible (true);");w0.setCentralWidget (label);w0.show ();app.exec();return 0;
}

参考

  • 应用程序示例 Application Example
  • 菜单示例 Menus Example

基本Widgets(29):【类】QMenu [官翻]相关推荐

  1. QSettings 类【官翻】

    文章目录 详述 基本用法 QVariant和GUI类型 Section 和 Key 的语法 后备机制 恢复GUI应用程序的状态 同时从多个线程或进程访问设置 特定于平台的说明 应用程序设置的存储位置 ...

  2. Qt 线程(02):线程类【官翻】

    线程类 类名 简介 Concurrent Filter and Filter-Reduce Concurrent Map and Map-Reduce Concurrent Run QAtomicIn ...

  3. QFileInfo 类【官翻】

    文章目录 详述 性能问题 公共函数 创建及析构 目录 路径.文件名及后缀 时间信息 缓存 属性 类型 访问权限 比较 静态公用函数 相关的非成员 QFileInfo 类 QFileInfo类提供与系统 ...

  4. QFileDevice 类【官翻】

    文章目录 一.详述 二.公共类型 三.公共函数 四.重新实现的公共函数 五.重新实现受保护的函数 QFileDevice 类 QFileDevice类提供用于读取和写入打开文件的接口. Header: ...

  5. QStorageInfo 类【官翻】

    文章目录 详述 公共函数 静态公共函数 相关非成员 QStorageInfo 类 提供有关当前安装的存储和驱动器的信息. Header: #include < QStorageInfo > ...

  6. QFile 类【官翻】

    文章目录 详述 直接读取文件 使用流读取文件 信号 平台特定问题 公共类型 公共函数 重新实现的公共函数 静态公用函数 QFile 类 QFile类提供用于读取和写入文件的接口. Header: #i ...

  7. Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻)

    Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻) 确定显示屏型号 扩展版类(shield) 转接板类(breakout Board) 目前支持的显示屏 ...

  8. 干货丨总结5类面试官特点和应对方法

    秋招已经结束,年后春招即将拉开帷幕,想必大家都已经参加了不少面试,也见了不少面试官,俗话说知己知彼,百战不殆,推荐下面这篇文章,一起看看面试官可以分成哪几类以及应对的方法~ 一.虚张声势型 故意虚张声 ...

  9. 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架

    在18日晚间新版iPad Pro及新款MacBook Air低调发布后,2018款iPad Pro以及老款MacBook Air也迅速在Apple Store中遭遇了下架处理.虽然消费者仍然可以通过第 ...

最新文章

  1. observable.unsubscribeOn(Schedulers.io())
  2. Intellij 如何在新窗口中打开项目
  3. Windows 技术篇 - windows日期和时间设置里没有Internet 时间页签原因和解决方法
  4. 基础JavaScript_Day04
  5. PHP 入门 - 5.数组
  6. linux启动停留在grub界面,启动linux停留在grub提示符的解决方法.doc
  7. centos 安装MySQL报错You could try using --skip-broken to work around the problem You could try running:
  8. 作者:魏凯(1981-),男,中国信息通信研究院移动互联网与大数据部高级工程师、副主任。...
  9. c语言for循环可以初始化多个变量么_C8循环
  10. 什么舱位_飞机的舱位究竟是怎么一回事儿
  11. oracle 打包导出表,数据库导出表数据库
  12. 《jike--微服务架构核心20讲》笔记
  13. 服装尺寸 html,服装尺寸表
  14. 关于用EAC抓轨的测试 (转载)
  15. 谢烟客---------Linux之bash编程
  16. 树状数组(二)——#10115. 「一本通 4.1 例 3」校门外的树
  17. 看一遍就理解:order by详解
  18. AF monitor tuning <2>
  19. REC代码及命令执行代码全解
  20. H3C路由器配置DHCP,交换机透明。

热门文章

  1. windows更换应用程序图标
  2. 改变vim配色:安装colorscheme
  3. 系统的版本说明 VOL OEM VLK FPP RTM RC
  4. Android开发百科全书②
  5. \u4e00-\u9fa5是什么意思?Unicode编码,匹配中文
  6. 中国手机发展史:从1G通讯技术到华为5G时代
  7. android学习笔记之HttpClient
  8. python 朋友圈评论_用Python发一个高逼格的朋友圈【附代码】
  9. 755 linux,linux系统644、755、777权限详解
  10. 在多台Linux服务器上允许命令的工具(ClusterSSH和Ansible)