【Qt 學習筆記】Qt窗口 | 菜單欄 | QMenuBar的使用及說明


  • 博客主頁:Duck Bro 博客主頁
  • 系列專欄:Qt 專欄
  • 關注博主,后期持續更新系列文章
  • 如果有錯誤感謝請大家批評指出,及時修改
  • 感謝大家點贊👍收藏?評論?

Qt窗口 | 菜單欄 | QMenuBar的使用及說明

文章編號:Qt 學習筆記 / 47

文章目錄

  • Qt窗口 | 菜單欄 | QMenuBar的使用及說明
    • 一、菜單欄
      • 1. 什么是菜單欄
      • 2. 菜單欄的組成控件
    • 二、代碼創建菜單欄及各組件
      • 1. 創建菜單欄
      • 2. 創建菜單
      • 3. 創建菜單項
      • 4. 添加分割線
      • 5. 添加快捷鍵
      • 6. 添加子菜單
      • 7. 添加圖標
      • 8. 文件完整代碼
    • 三、圖形化創建菜單欄及各組件
      • 1. 創建以QMainWindow為基類的項目
      • 2. 圖形化創建菜單欄各組件


一、菜單欄

1. 什么是菜單欄

菜單欄是指在計算機程序或操作系統界面上的一個水平條,通常位于頂部或頂部附近,用來顯示各種功能選項和操作命令。

菜單欄通常包含多個菜單,每個菜單都有一個標題和一系列相關的命令或選項。用戶可以通過點擊菜單標題或者在菜單欄上的相應按鈕來打開菜單,并從中選擇需要的操作。

在菜單欄中,常見的命令包括文件(File)、編輯(Edit)、視圖(View)、工具(Tools)、幫助(Help)等,不同的程序或操作系統可能會有不同的菜單欄布局和選項。菜單欄為用戶提供了一種直觀、可視化的方式來瀏覽和選擇程序的各種功能和操作。

2. 菜單欄的組成控件

在這里插入圖片描述

  • 菜單:菜單是菜單欄的核心組件,用來展示可選的操作項或功能。菜單通常以垂直列表的形式呈現,每個菜單項都可以點擊或懸停以顯示子菜單或執行相應的操作。

  • 下拉菜單:下拉菜單是菜單欄中的特殊菜單項,點擊或懸停在這些菜單項上,會展開一個子菜單,用戶可以進一步選擇所需的操作。

  • 菜單項:是菜單欄中的可選操作或功能的單個項目。每個菜單項通常由一個標簽或文本描述以及相應的操作或功能組成。

  • 分隔符:分隔符是菜單欄中的一條水平線,用于在菜單中分隔不同的菜單項,使菜單更加清晰易讀。分隔符一般用于將相似的菜單項分組,或者將不同類型的菜單項分隔開。


二、代碼創建菜單欄及各組件

1. 創建菜單欄

步驟流程

在這里插入圖片描述

創建菜單欄

創建的兩種方式:

  • 菜單欄的創建可以借助于 QMainWindow類 提供的 menuBar() 函數來實現。
  • 在堆上動態創建

使用setMenuBar把菜單欄放到窗口中

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menubar = new QMenuBar();//創建菜單欄QMenuBar* menubar = this->menuBar(); //推薦使用這種方法//菜單欄放入窗口中this->setMenuBar(menubar);
}

運行結果
注意:現在是只有菜單欄,菜單欄中沒有菜單所以顯示空白
在這里插入圖片描述


2. 創建菜單

步驟流程
在這里插入圖片描述
創建菜單,添加菜單到菜單欄

//創建菜單
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("編輯");
QMenu* menu3 = new QMenu("構建");
//添加菜單到菜單欄中
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);

運行結果
在這里插入圖片描述


3. 創建菜單項

步驟流程
在這里插入圖片描述

創建菜單,添加菜單到菜單欄

QAction 可以給菜單欄使?, 也可以給?具欄使?.

//創建菜單項
QAction* action1 = new QAction("新建");
QAction* action2 = new QAction("打開");
QAction* action3 = new QAction("保存");
//添加菜單項到菜單中
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);

運行結果
在這里插入圖片描述


4. 添加分割線

步驟流程
在這里插入圖片描述

添加分割線

//添加菜單項到菜單中
menu1->addAction(action1);
//在新建和保存中添加分割線
menu1->addSeparator();
menu1->addAction(action2);
menu1->addAction(action3);

運行結果
在這里插入圖片描述


5. 添加快捷鍵

使用&+字母,給文本中進行添加快捷鍵

QMenu* menu1 = new QMenu("文件(&A)"); //添加快捷鍵 &+字母
QMenu* menu2 = new QMenu("編輯(&M)"); //使用Alt+字母觸發
QMenu* menu3 = new QMenu("構建(&G)");

運行結果
在這里插入圖片描述


6. 添加子菜單

創建父菜單和子菜單,把子菜單添加到父菜單

//創建菜單
QMenu* menuparent = new QMenu("父菜單");
QMenu* menuchild = new QMenu("子菜單");
//添加菜單到菜單欄中
menubar->addMenu(menuparent);
menuparent->addMenu(menuchild);

運行結果
在這里插入圖片描述


7. 添加圖標

在阿里巴巴矢量圖標庫中進行查看合適的圖標,如下圖
在這里插入圖片描述

將圖片加入到qrc文件中,詳細步驟參考文章:qrc文件機制
在這里插入圖片描述

將圖片添加到菜單項中

//創建菜單項QAction* action1 = new QAction("新建");//添加新建圖標action1->setIcon(QIcon(":/add.png"));QAction* action2 = new QAction("打開");QAction* action3 = new QAction("保存");//添加保存圖標action3->setIcon(QIcon(":/save.png"));

運行結果
在這里插入圖片描述

8. 文件完整代碼

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//QMenuBar* menubar = new QMenuBar();//創建菜單欄QMenuBar* menubar = this->menuBar(); //推薦使用這種方法//菜單欄放入窗口中this->setMenuBar(menubar);//創建菜單QMenu* menu1 = new QMenu("文件(&A)"); //添加快捷鍵 &+字母QMenu* menu2 = new QMenu("編輯(&M)");QMenu* menu3 = new QMenu("構建(&G)");QMenu* menuparent = new QMenu("父菜單");QMenu* menuchild = new QMenu("子菜單");//添加菜單到菜單欄中menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);menubar->addMenu(menuparent);menuparent->addMenu(menuchild);//創建菜單項QAction* action1 = new QAction("新建");//添加新建圖標action1->setIcon(QIcon(":/add.png"));QAction* action2 = new QAction("打開");QAction* action3 = new QAction("保存");//添加保存圖標action3->setIcon(QIcon(":/save.png"));//添加菜單項到菜單中menu1->addAction(action1);//在新建和保存中添加分割線menu1->addSeparator();menu1->addAction(action2);menu1->addAction(action3);}MainWindow::~MainWindow()
{delete ui;
}

三、圖形化創建菜單欄及各組件

1. 創建以QMainWindow為基類的項目

過程參考文章Qt窗口 | Qt窗口介紹 | QMainwindow類及各組件介紹

2. 圖形化創建菜單欄各組件

  1. 在打開Qt自帶的ui文件界面后,得到以下界面
    在這里插入圖片描述
  2. 雙擊點擊界面中(在這里輸入),在菜單欄中進行添加菜單
    在這里插入圖片描述
  3. 在上述創建菜單后,界面發生改變得到以下界面
    在這里插入圖片描述
  4. 點擊創建好的菜單,雙擊在這里輸入,添加菜單項(新建)注意:由于Qt在此處存在BUG,中文菜單項需要復制粘貼的方式進行添加。
    在這里插入圖片描述
  5. 添加子菜單及子菜單項
    在這里插入圖片描述
  6. 添加分隔符
    在這里插入圖片描述
  7. 點擊運行,查看結果
    在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16070.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16070.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16070.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第20屆文博會:“特別呈現”—周瑛瑾雷米·艾融雙個展,著名美術評論家,批評家彭德教授對周瑛瑾作品進行評論

周瑛瑾不是學院派藝術家,但在彩墨畫領域的天賦超出中國八大美院的同類型畫家。相比具有批判意識的當代藝術,他的彩墨藝術如同我們這個苦難世界的創可貼和安慰劑。當我面對他的彩墨畫,首先是驚艷,隨之想到屈原的離騷,還…

無源相控陣雷達

什么是無源相控陣雷達 無源相控陣雷達(Passive Electronically Scanned Array Radar,簡稱PESA雷達)是一種雷達系統。這里的“無源”并未指其不發射信號,而是指其陣列單元不會產生并發射信號,其特點在于天線表面的陣列…

Vue與React、Angular的比較

Vue、React和Angular是前端開發中三個流行的JavaScript框架,它們各自具有不同的特點、優勢和適用場景。以下是對這三個框架的比較: 1. 基本概念 Vue:Vue是一套用于構建用戶界面的漸進式框架,其核心庫專注于視圖層,易…

[CISCN 2024] Crypto部分復現

文章目錄 OvOez_rsacheckin淺記一下 遲來的文章 OvO 題目描述: from Crypto.Util.number import * from secret import flagnbits 512 p getPrime(nbits) q getPrime(nbits) n p * q phi (p-1) * (q-1) while True:kk getPrime(128)rr kk 2e 65537 kk …

【三維修復、分割與編輯】InFusion、Bootstrap 3D、GaussianGrouping、GaussianEditor等(論文總結)

提示: 文章目錄 前言一、InFusion:擴散模型助力,效率提高20倍!(2024)1. 摘要2. 算法3. 效果 二、2D Gaussian Splatting三、Bootstrap 3D:從擴散模型引導三維重建1.摘要2.相關工作3.方法1.Boostrapping by Diffusion 通過擴散模型…

學習存儲協議的利器,聊聊tcpdump和Wireshark

數據存儲技術分為多個方面,包括數據持久化、數據映射、數據壓縮和通信協議等等。其中通信協議是數據存儲技術中非常重要的一部分,正是通信協議使得計算節點可以訪問存儲設備。同時,也正是不同的協議讓存儲系統呈現不同的形態。 如下圖所示,通過iSCSI協議,可以將存儲端的存…

使用std::vector<char>作為數據緩沖區分析

文章目錄 0. 引言1. 內存分配分析2. 性能影響3. 性能優化策略4. 實際性能測試5. 優化建議6. 總結額外建議 0. 引言 在 C 網絡編程中&#xff0c;std::vector<char> 常被用作數據緩沖區。與普通數組相比&#xff0c;std::vector 的內存分配在堆上&#xff0c;而非棧上&am…

【JVM實踐與應用】

JVM實踐與應用 1.類加載器(加載、連接、初始化)1.1 類加載要完成的功能1.2 加載類的方式1.3 類加載器1.4 雙親委派模型1.5自定義ClassLoader1.6 破壞雙親委派模型2.1 類連接主要驗證內容2.2 類連接中的解析2.3 類的初始化3.1 類的初始化時機3.2 類的初始化機制和順序3.2 類的卸…

C從零開始實現貪吃蛇大作戰

個人主頁&#xff1a;星紜-CSDN博客 系列文章專欄 : C語言 踏上取經路&#xff0c;比抵達靈山更重要&#xff01;一起努力一起進步&#xff01; 有關Win32API的知識點在上一篇文章&#xff1a; 目錄 一.地圖 1.控制臺基本介紹 2.寬字符 1.本地化 2.類項 3.setlocale函…

解釋Vue中transition的理解

在Vue中&#xff0c;transition組件用于在元素或組件插入、更新或移除時應用過渡效果。Vue 2和Vue 3都提供了transition組件&#xff0c;但兩者之間有一些差異和更新。以下是關于Vue 2和Vue 3中transition組件的理解&#xff1a; Vue 2中的transition 在Vue 2中&#xff0c;t…

Golang 如何使用 gorm 存取帶有 emoji 表情的數據

Golang 如何使用 gorm 存取帶有 emoji 表情的數據 結論&#xff1a;在 mysql 中盡量使用 utf8mb4&#xff0c;不要使用 utf8。db報錯信息&#xff1a;Error 1366 (HY000): Incorrect string value: \\xE6\\x8C\\xA5\\xE7\\xAC\\xA6...根本原因&#xff1a;emoji 4個字節&#x…

MybatisPlus分頁查詢

分頁查詢controller寫法 public PageResult findByList(RequestBody UserDTO userDTO) {// 分頁IPage<User> page new Page(UserDTO.getPageNumber(), UserDTO.getPageSize());// 條件構造器QueryWrapper queryWrapper new QueryWrapper();queryWrapper.eq("user…

【深度學習】第1章

概論: 機器學習是對研究問題進行模型假設,利用計算機從訓練數據中學習得到模型參數,并最終對數據進行預測和分析,其基礎主要是歸納和統計。 深度學習是一種實現機器學習的技術,是機器學習重要的分支。其源于人工神經網絡的研究。深度學習的模型結構是一種含多隱層的神經…

Springboot應用的配置管理

Spring Boot應用的配置管理 在本文中&#xff0c;我們將深入探討Spring Boot的配置文件&#xff08;application.properties/yaml&#xff09;&#xff0c;以及如何在不同環境中管理配置和使用Spring Config Server。此外&#xff0c;我們還將分享一些高級配置技巧&#xff0c…

Spring Cloud Alibaba 架構-Sentinel整合nacos和gateway

官網地址 sentinel官網: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 sentinel 下載地址: https://github.com/alibaba/Sentinel/releases nacos官網: https://nacos.io/zh-cn/docs/deployment.html nacos下載地址: https://github.com/alibaba/nacos/releas…

Shopee單個商品詳情采集

Shopee商品詳情頁數據采集實戰 作為東南亞地區最大的電商平臺之一,Shopee擁有超過3億活躍用戶。對于跨境電商企業、市場分析師等角色而言,從Shopee獲取商品數據是非常有價值的。本文將介紹如何使用Python程序采集Shopee單個商品詳情頁數據。 1. 確定采集目標和技術方案 確定…

路由傳參和獲取參數的三種方式

路由傳參和獲取參數在前端開發中是一個常見的需求&#xff0c;特別是在使用如 Vue.js、React 等前端框架時。下面&#xff0c;我將以 Vue.js 為例&#xff0c;介紹三種常見的路由傳參和獲取參數的方式&#xff1a; 1. 使用 params 傳參 傳參&#xff1a; 在路由配置中&#…

SQL Server 2022 STRING_SPLIT表值函數特性增強

SQL Server 2022 STRING_SPLIT表值函數特性增強 1、本文內容 List item語法參數返回類型注解 適用于&#xff1a;SQL Server 2016 (13.x) 及更高版本Azure SQL 數據庫Azure SQL 托管實例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析終結點Microsoft Fabric 中的倉…

golang內置包strings和bytes中的Map函數的理解和使用示例

在go的標志內置包strings和bytes中都有一個函數Map, 這個函數的作用是&#xff1a; 將輸入字符串/字節切片中的每個字符使用函數處理后映射后返回一份字符串/字節切片的副本&#xff0c;如果函數中的某個字符返回負數則刪除對應的字符。 作用很簡單&#xff0c;當時對于新手來…

Qt_tftp(未總結)

記錄一下tftp傳輸,日后總結 #ifndef CLIENTWORK_H #define CLIENTWORK_H#include <QObject> #include <QThread>#include <QHostAddress>