当前位置: 首页 > news >正文

qt QMenu详解

1、概述

QMenu是Qt框架中的一个类,用于创建和管理菜单。它提供了丰富的接口来添加菜单项(通常是QAction对象)、子菜单以及分隔符。QMenu可以嵌入到菜单栏(QMenuBar)中,也可以作为弹出菜单(通过调用exec()方法)使用。QMenu支持嵌套菜单,即菜单项本身可以是一个子菜单,从而创建出复杂的菜单结构。

QMenu不仅支持文本菜单项,还支持图标、快捷键和状态提示等功能,这些都可以通过QAction来设置。此外,QMenu还提供了对菜单项可见性、启用/禁用状态以及检查状态(checkable)的细粒度控制。

2、重要方法
  • addAction(QAction *action):向菜单中添加一个动作。
  • addMenu(QMenu *menu):向菜单中添加一个子菜单。
  • addSeparator():在菜单中添加一个分隔符。
  • clear():清除菜单中的所有项。
  • exec(const QPoint &pos = QPoint()):在指定位置显示菜单作为弹出菜单,并返回用户选择的动作的索引(或-1如果没有选择)。
  • setDefaultAction(QAction *action):设置菜单的默认动作,当用户按下回车键时触发。
  • setTitle(const QString &title):设置菜单的标题。
  • actions():返回菜单中所有动作的列表。

3、重要信号
  • triggered(QAction *action):当菜单中的某个动作被触发时发出此信号。
  • aboutToShow():在菜单即将显示之前发出此信号,可以用于动态调整菜单项。
  • aboutToHide():在菜单即将隐藏之前发出此信号。

需要注意的是,QMenu本身并不直接处理用户输入,而是通过QAction来响应动作。因此,大多数与QMenu交互的信号和槽都是通过QAction来实现的。

#include <QApplication>  
#include <QMainWindow>  
#include <QMenuBar>  
#include <QMenu>  
#include <QAction>  
#include <QMessageBox>  class MainWindow : public QMainWindow {  Q_OBJECT  public:  MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {  // 创建菜单栏  QMenuBar *menuBar = this->menuBar();  // 创建文件菜单  QMenu *fileMenu = menuBar->addMenu(tr("&File"));  // 创建动作  QAction *newAction = new QAction(tr("&New"), this);  newAction->setIcon(QIcon(":/icons/new.png"));  newAction->setStatusTip(tr("Create a new file"));  connect(newAction, &QAction::triggered, this, &MainWindow::onNewFile);  QAction *openAction = new QAction(tr("&Open..."), this);  openAction->setIcon(QIcon(":/icons/open.png"));  openAction->setStatusTip(tr("Open an existing file"));  connect(openAction, &QAction::triggered, this, &MainWindow::onOpenFile);  // 将动作添加到文件菜单  fileMenu->addAction(newAction);  fileMenu->addAction(openAction);  // 创建一个弹出菜单  QMenu *popupMenu = new QMenu(this);  QAction *exitAction = new QAction(tr("E&xit"), this);  exitAction->setStatusTip(tr("Exit the application"));  connect(exitAction, &QAction::triggered, qApp, &QApplication::quit);  popupMenu->addAction(exitAction);  QPushButton *btn = new QPushButton(this);setCentralWidget(btn);connect(btn, &QPushButton::clicked, this, [&, btn, popupMenu]{popupMenu->exec(btn->mapToGlobal(btn->rect().center()));});}  private slots:  void onNewFile() {  QMessageBox::information(this, tr("New File"), tr("Create a new file..."));  }  void onOpenFile() {  QMessageBox::information(this, tr("Open File"), tr("Open an existing file..."));  }  
};  int main(int argc, char *argv[]) {  QApplication app(argc, argv); MainWindow window;  window.show();  return app.exec();  
} 

觉得有帮助的话,打赏一下呗。。

           

http://www.lryc.cn/news/475227.html

相关文章:

  • HTMLCSS:旋转的动态卡片
  • 通过自然语言表达你的想法。GitHub Spark让任何人都能使用人工智能,为自己创建软件...
  • c++的list类
  • uniapp数据缓存
  • HarmonyOS-权限管理
  • Github 2024-11-02 Rust开源项目日报 Top10
  • 修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程
  • unreal engine5动画重定向
  • 蓝桥杯练习笔记(二十-日期问题)
  • jenkins 构建报错 mvn: command not found
  • Vue computed watch
  • 【java】java的基本程序设计结构06-运算符
  • 数据建模圣经|数据模型资源手册卷3,数据建模最佳实践
  • Kafka相关知识点(上)
  • network HCIE认证
  • 造纸粉体分散机、改性包覆机、改性打散机
  • npm入门教程1:npm简介
  • Vue3使用AntV | X6绘制流程图:开箱即用
  • grpc 快速入门
  • layui 实现 城市联动
  • C++11标准模板(STL)- 常用数学函数 - 分类及比较 - 对给定的浮点值分类(std::fpclassify)
  • 报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • OpenCV基本操作(python开发)——(7)实现图像校正
  • [项目] C++基于多设计模式下的同步异步日志系统
  • Vue常用的修饰符有哪些?
  • AnatoMask的分层图像编码器-解码器
  • 面向对象编程的核心特性:封装、继承、多态与抽象
  • ubuntu openmpi安装(超简单)
  • Python中的SQL数据库管理:SQLAlchemy教程
  • LeetCode --- 421周赛