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

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.kler.cn/a/377160.html

相关文章:

  • 洛谷 P1725:琪露诺 ← 单调队列+DP
  • 柒拾捌- 如何通过数据影响决策(六)- 放大再放大
  • 在Windows上读写Linux磁盘镜像的一种方法
  • OpenHarmony怎么修改DPI密度值?RK3566鸿蒙开发板演示
  • 深入理解Java虚拟机(JVM)
  • 软考-信息安全-网络安全体系与网络安全模型
  • 考研资料分享系统的设计与实现(lw+演示+源码+运行)
  • 【力扣专题栏】面试题 01.02. 判定是否互为字符重排,如何利用数组模拟哈希表解决两字符串互排问题?
  • YOLOv6-4.0部分代码阅读笔记-efficientrep.py
  • 【408操作系统】 使用信号量机制实现同步和互斥
  • C语言用GNU源码编译建构系统工具(GNU BUILD SYSTEM)编译创建源码包
  • TypeError: Cannot read properties of undefined (reading ‘__asyncLoader‘)
  • UE4_Niagara基础实例—13、通过纹理采样来创造粒子
  • Speaker Recognition说话人识别(声纹识别)
  • react18中redux-saga实战系统登录功能及阻塞与非阻塞的性能优化
  • 专利生成穿刺demo
  • Type-C PD诱骗取电快充协议芯片 支持PD 5V、9V、12V、15V、20V电压
  • 反常积分的敛散性判别
  • VBA在低版本Excel中创建unique函数的方法
  • Elasticsearch中的常用操作
  • Redis全系列学习基础篇之位图(bitmap)常用命令的解析
  • java8 list map 聚合求和
  • 线性代数求特征值和特征向量的技巧
  • 深基坑结构施工安全在自动化监测不知道怎么布设测点?不知道用什么设备?
  • 论分布式架构设计及其实现
  • CSRF与SSRF