基本Widgets(29):【类】QMenu [官翻]
文章目录
- 详细说明
- 操作(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()。
属性
icon: QIcon 菜单的图标
这相当于menuAction() 的QAction::icon属性。
默认情况下,如果未显式设置图标,则此属性包含空图标。
访问功能:
- QIcon icon() const
- void setIcon(const QIcon &icon)
separatorsCollapsible: bool 是否应折叠连续分隔符
此属性指定是否应将菜单中的连续分隔符可视地折叠为单个分隔符。菜单开头或结尾的分隔符也被隐藏。
默认情况下,此属性为true。访问功能:
- bool separatorsCollapsible() const
- void setSeparatorsCollapsible(bool collapse)
tearOffEnabled: bool 菜单是否支持撕开
如果为true,则菜单包含一个特殊的删除项(通常在菜单顶部显示为虚线),该项在触发菜单时创建菜单的副本。
这个“撕下来的”拷贝放在一个单独的窗口中。它包含与原始菜单相同的菜单项,除了可拆卸手柄。
默认情况下,此属性为false。访问功能:
- bool isTearOffEnabled() const
- void setTearOffEnabled(bool)
title: QString 菜单的标题
访问功能:
- QString title() const
- void setTitle(const QString &title)
toolTipsVisible: bool 菜单操作的工具提示是否应可见
此属性指定操作菜单项是否显示其工具提示。
默认情况下,此属性为false。访问功能:
- bool toolTipsVisible() const
- void setToolTipsVisible(bool visible)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STbUFyxa-1611892586591)(https://gitee.com/shenjiguicang/test/raw/master/images/20210129103334.png)]
公共函数
构造和析构
- QMenu(const QString &title, QWidget *parent = nullptr)
- QMenu(QWidget *parent = nullptr)
- virtual ~QMenu()
属性相关
- QIcon icon() const
- void setIcon(const QIcon &icon)
- bool separatorsCollapsible() const
- void setSeparatorsCollapsible(bool collapse)
- bool isTearOffEnabled() const
- void setTearOffEnabled(bool)
- QString title() const
- void setTitle(const QString &title)
- bool toolTipsVisible() const
- void setToolTipsVisible(bool visible)
活动和默认操作
- QAction * activeAction() const
- void setActiveAction(QAction *act)
- QAction * defaultAction() const
- void setDefaultAction(QAction *act)
位置上的操作和操作的几何大小
- QAction * actionAt(const QPoint &pt) const
- QRect actionGeometry(QAction *act) const
添加操作项
便利函数使用文本创建新操作。函数将新创建的操作添加到菜单的操作列表中,并返回它。
QMenu拥有返回的QAction的所有权。
- QAction * addAction(const QString &text)
- QAction * addAction(const QIcon &icon, const QString &text)
- QAction * addAction(const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
- QAction * addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
- QAction * addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
- QAction * addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
- QAction * addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
- QAction * addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
增加子菜单
添加子菜单。它返回menu的menuAction() 。此容器菜单不拥有子菜单的所有权。
- QAction * addMenu(QMenu *menu)
- QMenu * addMenu(const QString &title)
- QMenu * addMenu(const QIcon &icon, const QString &title)
- QAction * insertMenu(QAction *before, QMenu *menu)
- QAction * menuAction() const 返回与此菜单关联的操作
增加部分
创建一个新的部分操作,即QAction::isSeparator() 返回true但同时具有文本提示的操作,并将新操作添加到此菜单的操作列表中。它返回新创建的操作。
QMenu拥有返回的QAction的所有权。
- QAction * addSection(const QString &text)
- QAction * addSection(const QIcon &icon, const QString &text)
- QAction * insertSection(QAction *before, const QString &text)
- QAction * insertSection(QAction *before, const QIcon &icon, const QString &text)
增加分割线
- QAction * addSeparator()
- QAction * insertSeparator(QAction *before)
分离式菜单
- void hideTearOffMenu()
- bool isTearOffMenuVisible() const
- void showTearOffMenu()
- void showTearOffMenu(const QPoint &pos)
清空
- void clear()
- bool isEmpty() const
显示
QAction * exec() 同步显示
QAction * exec(const QPoint &p, QAction *action = nullptr)
exec(QCursor::pos()); 当前鼠标位置
exec( somewidget.mapToGlobal( QPoint(0,0) ) ); 与小部件对齐
exec(e->globalPos()); 对QMouseEvent* e的反应
void popup(const QPoint &p, QAction *atAction = nullptr) 异步显示
macOS相关
- void setAsDockMenu() 通过单击应用程序停靠图标选项,将此菜单设置为可用的停靠菜单。仅在macOS上可用。
- NSMenu * toNSMenu() 返回此菜单的本机NSMenu。仅在macOS上可用
重写的公共函数
- virtual QSize sizeHint() const override
信号
void aboutToHide() 将要隐藏
void aboutToShow() 将要显示
void hovered(QAction *action) 此信号在高亮显示菜单操作时发出
操作是导致发出信号的操作。这通常用于更新状态信息。void triggered(QAction *action) 此信号在触发此菜单中的操作时发出
动作是导致发出信号的动作。通常,您会将每个菜单操作的triggered() 信号连接到它自己的自定义槽,但有时您会希望将多个操作连接到单个槽,例如,当您有一组密切相关的操作时,例如“left justify”、“center”、“right justify”。
注意:此信号是为层次结构中的主父菜单发出的。因此,只有父菜单需要连接到插槽;子菜单不需要连接。
静态的公共函数
- QAction * exec(QList<QAction *> actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr)
受保护的函数
- int columnCount() const
- void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const
重写的受保护的函数
- virtual void actionEvent(QActionEvent *e) override
- virtual void changeEvent(QEvent *e) override
- virtual void enterEvent(QEvent *) override
- virtual bool event(QEvent *e) override
- virtual bool focusNextPrevChild(bool next) override
- virtual void hideEvent(QHideEvent *) override
- virtual void keyPressEvent(QKeyEvent *e) override
- virtual void leaveEvent(QEvent *) override
- virtual void mouseMoveEvent(QMouseEvent *e) override
- virtual void mousePressEvent(QMouseEvent *e) override
- virtual void mouseReleaseEvent(QMouseEvent *e) override
- virtual void paintEvent(QPaintEvent *e) override
- virtual void timerEvent(QTimerEvent *e) override
- 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 [官翻]相关推荐
- QSettings 类【官翻】
文章目录 详述 基本用法 QVariant和GUI类型 Section 和 Key 的语法 后备机制 恢复GUI应用程序的状态 同时从多个线程或进程访问设置 特定于平台的说明 应用程序设置的存储位置 ...
- Qt 线程(02):线程类【官翻】
线程类 类名 简介 Concurrent Filter and Filter-Reduce Concurrent Map and Map-Reduce Concurrent Run QAtomicIn ...
- QFileInfo 类【官翻】
文章目录 详述 性能问题 公共函数 创建及析构 目录 路径.文件名及后缀 时间信息 缓存 属性 类型 访问权限 比较 静态公用函数 相关的非成员 QFileInfo 类 QFileInfo类提供与系统 ...
- QFileDevice 类【官翻】
文章目录 一.详述 二.公共类型 三.公共函数 四.重新实现的公共函数 五.重新实现受保护的函数 QFileDevice 类 QFileDevice类提供用于读取和写入打开文件的接口. Header: ...
- QStorageInfo 类【官翻】
文章目录 详述 公共函数 静态公共函数 相关非成员 QStorageInfo 类 提供有关当前安装的存储和驱动器的信息. Header: #include < QStorageInfo > ...
- QFile 类【官翻】
文章目录 详述 直接读取文件 使用流读取文件 信号 平台特定问题 公共类型 公共函数 重新实现的公共函数 静态公用函数 QFile 类 QFile类提供用于读取和写入文件的接口. Header: #i ...
- Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻)
Esp8266 / nodeMCU / wemos D1 MINI GUIslice的配置(官翻) 确定显示屏型号 扩展版类(shield) 转接板类(breakout Board) 目前支持的显示屏 ...
- 干货丨总结5类面试官特点和应对方法
秋招已经结束,年后春招即将拉开帷幕,想必大家都已经参加了不少面试,也见了不少面试官,俗话说知己知彼,百战不殆,推荐下面这篇文章,一起看看面试官可以分成哪几类以及应对的方法~ 一.虚张声势型 故意虚张声 ...
- 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架
在18日晚间新版iPad Pro及新款MacBook Air低调发布后,2018款iPad Pro以及老款MacBook Air也迅速在Apple Store中遭遇了下架处理.虽然消费者仍然可以通过第 ...
最新文章
- observable.unsubscribeOn(Schedulers.io())
- Intellij 如何在新窗口中打开项目
- Windows 技术篇 - windows日期和时间设置里没有Internet 时间页签原因和解决方法
- 基础JavaScript_Day04
- PHP 入门 - 5.数组
- linux启动停留在grub界面,启动linux停留在grub提示符的解决方法.doc
- centos 安装MySQL报错You could try using --skip-broken to work around the problem You could try running:
- 作者:魏凯(1981-),男,中国信息通信研究院移动互联网与大数据部高级工程师、副主任。...
- c语言for循环可以初始化多个变量么_C8循环
- 什么舱位_飞机的舱位究竟是怎么一回事儿
- oracle 打包导出表,数据库导出表数据库
- 《jike--微服务架构核心20讲》笔记
- 服装尺寸 html,服装尺寸表
- 关于用EAC抓轨的测试 (转载)
- 谢烟客---------Linux之bash编程
- 树状数组(二)——#10115. 「一本通 4.1 例 3」校门外的树
- 看一遍就理解:order by详解
- AF monitor tuning <2>
- REC代码及命令执行代码全解
- H3C路由器配置DHCP,交换机透明。
热门文章
- windows更换应用程序图标
- 改变vim配色:安装colorscheme
- 系统的版本说明 VOL OEM VLK FPP RTM RC
- Android开发百科全书②
- \u4e00-\u9fa5是什么意思?Unicode编码,匹配中文
- 中国手机发展史:从1G通讯技术到华为5G时代
- android学习笔记之HttpClient
- python 朋友圈评论_用Python发一个高逼格的朋友圈【附代码】
- 755 linux,linux系统644、755、777权限详解
- 在多台Linux服务器上允许命令的工具(ClusterSSH和Ansible)