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

Qt菜单功能实现

本文介绍Qt菜单功能实现。

Qt开发过程中,菜单功能用的还是比较多的,本文针对菜单栏右键菜单功能实现作简要描述。

1.菜单栏

1)界面设计

在界面中添加菜单栏(本例中名为“menubar”),并依次添加需要的菜单(本例中名为“File”),在各菜单项中添加动作(本例中名为“actionFunc1”,“actionFunc2”)。界面设计如下图所示。

这里,菜单栏(QMenuBar)和菜单(QMenu)类似于一个容器控件,将最终需要实现功能的动作(QAction)容纳在里面,而动作的功能实现本质上和QPushButton类鼠标点击功能实现类似。

2)代码实现

这里需要连接动作触发事件和用户定义的槽函数,参考代码如下:

connect(ui->actionFunc1, &QAction::triggered, this, &MainWindow::onActionFunc1Triggered);
connect(ui->actionFunc2, &QAction::triggered, this, &MainWindow::onActionFunc2Triggered);

槽函数功能实现,参考代码如下:

void MainWindow::onActionFunc1Triggered()
{
    qDebug() << "Func1 triggred";
}

void MainWindow::onActionFunc2Triggered()
{
    qDebug() << "Func2 triggred";
}

可以看到,菜单动作和鼠标单击非常相似,在对应的槽函数可以添加需要实现的功能即可。

2.右键菜单

1)创建菜单

右击菜单实现这里不设计界面,而是通过代码的功能实现。参考代码如下:

void MainWindow::createRightClickMenu()
{
    pMenu = new QMenu(this);
    pAction1 = pMenu->addAction("Func1");
    pAction2 = pMenu->addAction("Func2");

    connect(pAction1, &QAction::triggered, this, &MainWindow::onActionFunc1Triggered);
    connect(pAction2, &QAction::triggered, this, &MainWindow::onActionFunc2Triggered);
}

这里,和菜单栏实现类似也需要建立动作事件和用户定义的槽函数之间的连接。

2)右击显示

菜单栏的显示类似于一个模态对话框,需要调用exec()函数来显示。首先需要响应鼠标右击事件,这里覆盖mousePressEvent响应函数,参考代码如下:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::RightButton) {
        pMenu->exec(cursor().pos());
    }

    QMainWindow::mousePressEvent(event);
}

对于右击菜单中的功能实现和菜单栏类似,这里就不作过多描述,参考代码如下:

void MainWindow::onActionFunc1Triggered()
{
    qDebug() << "Func1 triggred";
}

void MainWindow::onActionFunc2Triggered()
{
    qDebug() << "Func2 triggred";
}

总结,本文介绍了Qt菜单功能实现。


http://www.kler.cn/a/387941.html

相关文章:

  • 常见error集合
  • 树-好难-疑难_GPT
  • Iceberg 写入和更新模式,COW,MOR(Copy-on-Write,Merge-on-Read)
  • css:没错又是我
  • old-cms(原生PHP开发的企业网站管理系统)
  • 企业级容器技术docker之一键生成 Docker Compose
  • 【Ant.designpro】上传图片
  • LeetCode-两整数之和
  • 清华大学提出Mini-Omni2:开源多模态模型,功能与GPT-4o媲美!
  • 继承的学习
  • 漫途LoRa家族系列产品,高效、稳定、智能的物联网通信!
  • 智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章
  • 【MySQL】数据的增删查改
  • //字符串数组
  • STM32单片机WIFI语音识别智能衣柜除湿消毒照明
  • 在 C# 中,ICollection 和 IList 接口有什么区别?
  • SQL注入攻击及其在SpringBoot中使用MyBatisPlus的防范策略
  • [OpenGL]使用OpenGL实现硬阴影效果
  • Audio-Language Models
  • MySQL8完全卸载方法-Win10系统
  • 4.python字面量
  • nvm 切换 Node.js 版本
  • LabVIEW扫描探针显微镜系统
  • 订单分库分表
  • 常用的c++特性-->day02
  • IMX93适配4G网络