qt中的菜单QMenu QAction

2023-11-13

Qt中要建立菜单,有三个类很重要:

QMenuBar(QWidget * parent = 0)
QMenu(QWidget * parent = 0) 
QMenu(const QString & title, QWidget * parent = 0)
QAction(QObject * parent) 
QAction(const QString & text, QObject * parent) 
QAction(const QIcon & icon, const QString & text, QObject * parent)

QMenuBar:就是所有窗口的菜单栏,在此基础上添加不同的QMenu和QAction

QMenu:菜单栏里面菜单,可以显示文本和图标,但是并不负责执行操作,有点类似label的作用

QAction: Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示。QAction才是真正负责执行操作的部件。

建立一个菜单栏,基本上要三步:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

    QMenu* menu[10];
    QAction* act[10];
    QMenuBar* menuBar ;
    QStatusBar* status ;
public slots:
    void trigerMenu(QAction* act);
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <Qt>
#include <QtDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(400,300);
    this->centralWidget();

    status = new QStatusBar(this);

    menu[0] = new QMenu("文件");
    menu[0]->addAction("编辑");
    menu[0]->addAction("查看");
    menu[0]->addAction("工具");

    act[0] = new QAction("新建",this);
    act[0]->setShortcut(Qt::CTRL | Qt::Key_A );
    act[0]->setStatusTip("这是一个新建菜单");

    act[1] = new QAction("打开",this);
    act[1]->setCheckable(true);

    menu[1] = new QMenu("保存");
    menu[1]->addAction(act[0]);
    menu[1]->addAction(act[1]);

    menu[2] = new QMenu("打印");
    menu[2]->addAction("打印设置");
    menu[2]->addMenu(menu[1]);

    menuBar = new QMenuBar(this);
    menuBar->addMenu(menu[0]);
    menuBar->addMenu(menu[2]);
    menuBar->setGeometry(0,0,this->width(),30);

    connect(menuBar,SIGNAL(triggered(QAction*)),this,SLOT(trigerMenu(QAction*)));
}

MainWindow::~MainWindow()
{

}

void MainWindow::trigerMenu(QAction* act)
{
    if(act->text() == "新建")
    {
        qDebug()<<"新建菜单被按下";
    }
}
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt中的菜单QMenu QAction 的相关文章

  • Q风格所有权

    在 Qt 应用程序中使用样式时 我遇到了一个有趣的问题QStyle所有权 QStyle继承自QObject 通常接受QObject parent作为构造函数参数来管理其子级的生命周期 但QStyle的构造函数没有此构造函数参数 第一个问题
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • 在 Qt GraphicsView 中创建长线(或十字线)光标的最佳方法

    创建长十字线光标 与视口一样长 的简单方法是创建一条十字线graphicsItem 当鼠标移动时 设置该项目的pos财产 但是当场景复杂时这种方式会很慢 因为它要更新整个视口来更新光标的pos 另一种简单的方法是setCursor QCur
  • 使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

    我将开始在 Qt 中编写基于 2D 图块的游戏 并阅读 QGraphicsScene 和 QGraphicsView 类 这些类旨在显示和处理大量 2D 对象 我的问题是 使用 QGraphicsScene 创建一个包含大量图块的世界是否可
  • QT:模块“QtWebView”未安装

    我的操作系统是win10 QT版本是Qt5 7 mingw53 32 目标操作系统是win10 当我使用qmlscene执行qml文件时 发生了一些错误 qrc qml 3 模块 QtWebView 未安装 我的 qml 文件如下 impo
  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • Android 上与 Qt 5.2 的蓝牙通信[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想使用 Qt 框架使我的 Android 设备能够通过蓝牙进行通信 截至今天 Qt 5 2 是最新的 据我所知 尚不支持蓝牙 在本页
  • QTextEdit 与 QPlainTextEdit

    有什么区别QTextEdit and QPlainTextEdit 为什么要使用其中一种而不是另一种 我正在编写一个文本编辑器作为学习 Qt5 的练习 现在我想知道是否使用QTextEdit or QPlainTextEdit 到目前为止我
  • 仅具有年/月视图的 PyQt 日历

    在 Qt Designer 中 QDateTimeEdit 具有日历视图选项 通过设置显示格式 我只能显示月 年 但是 当用户单击视图时 它会自动显示每日日历 有没有办法让它只显示月 年日历 为了形象地解释一下 Windows 日历具有与
  • 从 QWebEngineView 或 QWebEnginePage 中删除滚动条

    有没有办法删除滚动条QWebEngineView或者我可以以某种方式访问 它的 ScrollArea 吗 使用 webkit 就这么简单 WebView gt page gt setScrollBarPolicy Qt Vertical Q
  • 如何找到位于给定 (X,Y) 位置的 DOM 节点? (命中测试)

    我有 HTML 文档中一个点的坐标 X Y 如何确定这些坐标处的 DOM 节点是什么 一些想法 是否有我错过的 DOM 命中测试函数 它需要一个点 X Y 并返回那里的 DOM 元素 有没有一种有效的方法来遍历 DOM 元素树来查找包含元素
  • Qt 文本选择白线和文本宽度

    我想在 QTextEdit 中自定义文本选择 我想要两件事 选择时删除空格 线条 能够选择选择的宽度 或者小部件宽度 或文本宽度 空白 线条 通常 我想要的是 来自 Bear 应用程序 熊文本选择 在使用 QTextEdit 小部件时 我注
  • 仅使 QTreeWidgetItem 的一列可编辑

    我有一个QTreeWidgetItem有两列数据 有什么办法可以只让第二列可编辑吗 当我执行以下操作时 QTreeWidgetItem item new QTreeWidgetItem item gt setFlags item gt fl
  • QDateTime::fromstring( __DATE__, "MMM d yyyy") 返回无效

    解析MSVC 预定义 DATE 也许结合 TIME 宏与 QDateTime fromstring 不返回任何内容 无效的 QDateTime 对象 为什么 From http msdn microsoft com en us librar
  • QNetworkAccessManager 的替代方案

    我正在BB10中绘制地图 地图被划分为图块 开始时 用户给出经度 纬度和缩放级别 地图将显示在该坐标处 我通过使用 QNetworkAccessManager 执行 http 请求来获得单个图块 首先下载 7x5 块 但问题是 当用户开始在
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实

随机推荐

  • Java中数字的应用

    Java中数字的应用 在java中经常会遇到比较大的数 甚至超过了long型 那么该如何处理这些 大数据 呢 在java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类 从原则上是可以表示 天文单位 一样大的
  • 阿里云ACP学习笔记(一)——ECS的特性

    一 ECS 1 什么是ECS 云服务器ECS Elastic Compute Service 是一种简单高效 处理能力可弹性伸缩的计算服务 在云计算中 可以将它理解为一个主机 可以单独提供计算 存储功能等多种功能 但面对现实业务 它的能力将
  • 背单词十大方法

    1 背单词相关短语 2 重复使用单词与他人对话 3 使用便利贴 营造单词背诵环境 4 做单词背诵日记 记下今天的生词并背诵 5 画图 画下自己的脑洞 6 联想 想想自己对这个词的印象把其他词联系起来 7 联系上下文 8 练习新单词 似乎重复
  • rabbitmq报错socket closed

    java net SocketException Socket Closed at java net SocketInputStream socketRead0 Native Method na 1 8 0 131 at java net
  • MATLAB生成雄克机械臂及动画演示

    部分代码 L1 0 35 L2 0 305 L3 0 3 base 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 trotz 180 tool 1 0 0 0 0 1 0 0 3 0 0 1 0 0 0 0 1 troty
  • 华为OD机试 Java 实现【密码强度等级】【牛客练习题】,附详细解题思路

    一 题目描述 密码按如下规则进行计分 并根据不同的得分为密码进行安全等级划分 1 密码长度 5 分 小于等于4 个字符 10 分 5 到7 字符 25 分 大于等于8 个字符 2 字母 0 分 没有字母 10 分 密码里的字母全都是小 大
  • 解决 Windows11 无法安装 ISE Design Suite 14.7—— 用 VMware 虚拟机安装 ISE Design Suite 14.7

    前言 学校计组实验 数电实验需要用ISE 我的电脑又升级到windows11 不能装ISE了 实在没办法只能在虚拟机中装win10环境 再把下载好的ISE安装包拖到win10环境的虚拟机里 然后就安装成功了 下面是成功截图 前提是 安装好了
  • android 文件组指定应用程序,Android11(30)/Android10(29)分区存储-相关接口

    Android11 30 Android10 29 分区存储 相关接口 Android11 30 Android10 29 分区存储 相关接口 本文仅仅是接口说明 对于具体的使用方式 后续会说明 为了让用户更好地管理文件并减少混乱 Andr
  • mysql.cj.jdbc_Mysql版本java问题(com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver)

    老版本com mysql jdbc Driver已弃用 String url1 jabc mysql 127 0 0 1 3306 test String url1 jabc mysql localhost 3306 test 新版用com
  • java 访问 https网站,java用ssl和url共同类实现访问某https网站

    package test import java io import java net import java security cert CertificateException import java security cert X50
  • LCD12864驱动(Proteus中用51单片机驱动AMPIRE128X64)

    致谢 先贴张图来感谢一下我那傻逼的王志学长 要不是你给我的资料跟我用的LCD型号不一样 我TM早就驱动起来了 填坑 1 TMD Proteus的AMPIRE128X64这个型号的LCD内部没有所谓的ASCII码解码器 所以在驱动的时候就不能
  • windows编译ACE_6.4.5中ACE的x64静态库时x86与x64冲突

    以release x64编译ACE静态库时 报错如下 gt LINK warning LNK4068 未指定 MACHINE 默认设置为 X86 报ACE obj fatal error LNK1112 模块计算机类型 x64 与目标计算机
  • welsh颜色迁移算法实现过程-python版

    很久很久以前 笔者曾经研究学习过welsh算法 并用c 实现过 见链接 welsh颜色迁移算法实现过程 后来心血来潮想再看看效果 却发现opencv的版本已经更迭变化太快了 且有学友也想复现一下实验效果 因此决定用再用python实现一次改
  • Ai&Bd资料

    Ai Bd资料收集 目录 Ai Bd资料收集 1 1 人工智能AI 1 1 1 产业规模 头部企业占比 1 1 1 1 总体产业规模 1 1 1 2 投资热点 2 1 1 3头部企业占比 3 1 2 技术流派 4 1 2 研判未来3 5年产
  • 搭建Prometheus监控报警服务

    什么是Prometheus Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库 TSDB Prometheus使用Go语言开发 是Google BorgMon监控系统的开源版本 2016年由Google发起Li
  • 关于端口协议Up down的一点理解

    在处理网络障碍的时候 经常需要查看端口的状态 端口所配协议的状态 使用一些常用的工具里投入ping等命令进行测试 然后大家有没有发现 路由器或者三层交换机针对于广域网的端口的查看和以太网的端口查看包括ping等有很大区别 在此将自己的理解概
  • 数据结构与算法--分治策略

    目录 1 分治概念 2 递归的概念递归 3 分治策略的 1 分治策略的特征 2 分治法步骤 4 栈的面试题 5 示例 1 示例1求解n的阶乘 1 分析 2 阶乘可递归的定义为 3 递归程序 4 图解递归过程 代码的调动过程 5 图解递归过程
  • git提交多个文件到远程服务器,解决使用commit提交大文件无法推送到远程库问题及git rebase使用详解...

    解决这个问题并没有特别的 删除提交历史中某个文件 然后重新push 但是由于开始的使用失误 中间有使用git rebase和git reset命令处理 所以特此记录下 大文件无法push到远程仓库 问题 首先 故事 事故 的起因是这样的 某
  • SpringJDBC与声明式事务操作

    文章目录 Spring JDBC与事务操作 一 Spring整合JDBC的环境 一 添加依赖坐标 二 添加jdbc properties的配置 三 创建Spring的配置文件 四 配置数据源 五 JDBC测试 二 持久层账户模块操作 例 一
  • qt中的菜单QMenu QAction

    Qt中要建立菜单 有三个类很重要 QMenuBar QWidget parent 0 QMenu QWidget parent 0 QMenu const QString title QWidget parent 0 QAction QOb