QML菜單控件:菜單的常規用法

目錄

    • 引言
    • 📚相關閱讀
    • 🔨BUG修復
    • 工程結構
    • 示例詳解
      • 示例1:上下文菜單(ContextMenu)
      • 示例2:菜單欄(MenuBar)
      • 示例3:動態菜單
      • 示例4:快捷鍵菜單
      • 示例5:可選項菜單
    • 總結
    • 工程下載

引言

在Qt Quick應用程序開發中,菜單是一個非常重要的用戶界面組件。它可以幫助我們組織和管理應用程序的功能,提供更好的用戶體驗。本文將介紹QML中菜單控件的幾種常見用法,通過5個具體的示例來展示如何實現不同類型的菜單。

📚相關閱讀

  • Qt官方文檔:Menu
  • QML菜單控件: 構建統一的菜單樣式
  • QML 菜單控件:MenuBar、MenuBarItem、Menu、MenuItem層級關系和用法

🔨BUG修復

  • 解決示例5 check狀態失效的問題

工程結構

Main.qml
Menu1.qml
Menu2.qml
Menu3.qml
Menu4.qml
Menu5.qml
icons
copy.png
cut.png

示例詳解

示例1:上下文菜單(ContextMenu)

這個示例展示了如何創建一個右鍵點擊觸發的上下文菜單。

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 300color: "lightgray"Button {text: "右鍵點擊顯示菜單"anchors.centerIn: parentMouseArea {anchors.fill: parentacceptedButtons: Qt.RightButtononClicked: contextMenu.popup()}}Menu {id: contextMenuMenuItem {text: "復制"icon.source: "icons/copy.png"onTriggered: console.log("復制被點擊")}MenuItem {text: "剪切"icon.source: "icons/cut.png"onTriggered: console.log("剪切被點擊")}MenuSeparator { }MenuItem {text: "退出"onTriggered: Qt.quit()}}
}

代碼解釋:

  1. 使用MouseArea捕獲右鍵點擊事件
  2. Menu組件定義了一個上下文菜單
  3. MenuItem定義菜單項,可以包含圖標
  4. MenuSeparator添加分隔線
  5. 通過popup()方法顯示菜單

運行效果:

上下文菜單

示例2:菜單欄(MenuBar)

這個示例展示了如何創建一個標準的菜單欄。

import QtQuick
import QtQuick.Controls
import QtQuick.LayoutsRectangle {width: 400height: 300color: "lightgray"MenuBar {width: parent.widthMenu {title: "文件"MenuItem {text: "新建"onTriggered: console.log("新建文件")}Menu {title: "最近打開"MenuItem { text: "文檔1" }MenuItem { text: "文檔2" }}MenuSeparator { }MenuItem {text: "退出"onTriggered: Qt.quit()}}}
}

代碼解釋:

  1. MenuBar組件創建菜單欄
  2. 可以嵌套多個Menu創建子菜單
  3. 每個Menu都有標題和菜單項
  4. 支持菜單項的事件處理

運行效果:

菜單欄

示例3:動態菜單

這個示例展示了如何動態生成菜單項。

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 300color: "lightgray"Button {text: "點擊顯示動態菜單"anchors.centerIn: parentonClicked: dynamicMenu.popup()}Menu {id: dynamicMenuInstantiator {model: ["選項1", "選項2", "選項3"]delegate: MenuItem {text: modelDataonTriggered: console.log("選擇了:", modelData)}onObjectAdded: function(index, object) {dynamicMenu.insertItem(index, object)}onObjectRemoved: function(index, object) {dynamicMenu.removeItem(object)}}}
}

代碼解釋:

  1. 使用Instantiator動態創建菜單項
  2. 通過model提供數據源
  3. delegate定義每個菜單項的樣式和行為
  4. 支持動態添加和刪除菜單項

運行效果:

動態菜單

示例4:快捷鍵菜單

這個示例展示了如何創建支持快捷鍵的菜單。

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 300color: "lightgray"MenuBar {width: parent.widthMenu {title: "編輯"Action {id: copyActiontext: "復制 (Ctrl+C)"icon.source: "icons/copy.png"shortcut: StandardKey.CopyonTriggered: console.log("復制")}Action {id: cutActiontext: "剪切 (Ctrl+X)"icon.source: "icons/cut.png"shortcut: StandardKey.CutonTriggered: console.log("剪切")}}}Text {anchors.centerIn: parenttext: "使用快捷鍵 Ctrl+C 和 Ctrl+X\n觸發菜單功能"horizontalAlignment: Text.AlignHCenter}
}

代碼解釋:

  1. 使用Action組件定義帶快捷鍵的菜單項
  2. shortcut屬性設置快捷鍵
  3. 支持標準快捷鍵(如StandardKey.Copy
  4. 可以同時顯示快捷鍵提示

運行效果:

快捷鍵菜單

示例5:可選項菜單

這個示例展示了如何創建包含復選框和單選按鈕的菜單。

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 300color: "lightgray"Button {text: "設置菜單"anchors.centerIn: parentonClicked: settingsMenu.popup()}Menu {id: settingsMenutitle: "設置"Action {id: autoSaveActiontext: "自動保存"checkable: truechecked: falseonTriggered: {console.log("自動保存:", checked)}}Menu {title: "主題"MenuItem {text: "淺色"checkable: truechecked: trueButtonGroup.group: themeGroup}MenuItem {text: "深色"checkable: trueButtonGroup.group: themeGroup}}}ButtonGroup {id: themeGroup}
}

代碼解釋:

  1. checkable屬性使菜單項可選中
  2. checked屬性控制選中狀態
  3. 使用ButtonGroup管理單選按鈕組
  4. 支持嵌套菜單結構

運行效果:

可選菜單


總結

本文通過5個具體的示例,展示了QML中菜單控件的常見用法:

  1. 上下文菜單:通過右鍵點擊觸發
  2. 菜單欄:創建標準的應用程序菜單
  3. 動態菜單:根據數據動態生成菜單項
  4. 快捷鍵菜單:支持鍵盤快捷鍵操作
  5. 可選項菜單:包含復選框和單選按鈕

工程下載

您可以在Gitcode上獲取完整的示例代碼:GitCode QML菜單的常規用法

GitCode - qml menu usage

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

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

相關文章

【Vue-路由案例】面經基礎版

目錄 <<回到導覽1.面經基礎版1.1.VueCli建項目1.1.1.VueCli 自定義項目1.1.2.ESlint代碼規范 1.2.項目路由1.2.1.一級路由配置1.2.2.二級配置路由1.2.3.設置高亮1.2.4.發生請求、渲染1.2.5.跳轉傳參、再發請求1.2.6.體驗優化1.2.7.keep-alive <<回到導覽 1.面經基…

【T2I】MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis

code&#xff1a;CVPR 2024 MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis [CVPR 2024] MIGC: Multi-Instance Generation Controller for Text-to-Image Synthesis - 知乎 Abstract 我們提出了一個多實例生成(Multi-Instance Generation, MIG)任務…

用AI來了解用戶都在關注的品牌問題是什么?

? ??用戶重復問的核心問題整理?? 基于百度文心一言、豆包、KIMI、騰訊元寶、DeepSeek五大模型的回答&#xff0c;企業最關注的GEO問題可歸納為以下10類&#xff08;按優先級排序&#xff09;&#xff1a; ??1. GEO是什么&#xff1f;與傳統SEO有何本質區別&#xff1f…

OpenCv(七)——模板匹配、打包、圖像的旋轉

目錄 一、模板匹配 模板匹配原理 1、單模板之間的匹配 &#xff08;1&#xff09;讀取并顯示待匹配的圖片和模板圖片 &#xff08;2&#xff09;模板匹配并繪制匹配位置的外接矩形 &#xff08;3&#xff09;顯示最終的效果 2、模板與多個對象匹配&#xff0c;僅匹配當前…

藍橋云客 最大和

問題描述 小藍在玩一個尋寶游戲&#xff0c;游戲在一條筆直的道路上進行&#xff0c;道路被分成了 n 個方格&#xff0c;依次編號 1 至 n&#xff0c;每個方格上都有一個寶物&#xff0c;寶物的分值是一個整數&#xff08;包括正數、負數和零&#xff09;&#xff0c;當進入一…

【C++算法】49.分治_歸并_計算右側小于當前元素的個數

文章目錄 題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;圖解 題目鏈接&#xff1a; 315. 計算右側小于當前元素的個數 題目描述&#xff1a; 解法 歸并排序&#xff08;分治&#xff09; 當前元素的后面&#xff0c;有多少個比我小。&#xff08;降序&…

IPSec簡單例子

實驗說明 使用Ensp模擬器實現IPsec隧道實驗。IPSec是一種VPN技術&#xff0c;配置的思路首先是兩個網絡先通&#xff0c;然后配置ACL、IEK和IPSec對等體&#xff0c;從而建立VPN隧道。 實驗拓撲 配置過程 1 配置IP地址以及OSPF路由 # 配置中使用了簡寫命令&#xff0c;不熟…

車載聯網終端4G汽車TBOX介紹定義與概述

汽車 TBOX&#xff08;Telematics Box&#xff09;是專為汽車設計的遠程通信終端設備&#xff0c;屬于車聯網系統的關鍵組成部分。車聯網系統一般包含主機、汽車 T - BOX、手機 APP 及后臺系統。融合了車身網絡和 4G 無線通信技術&#xff0c;為汽車提供豐富的 Telematics 服務…

《DeepSeek RAG 增強檢索知識庫系統》Ollama DeepSeek 流式應答頁面對接之三

前言 自從有了 AI 工具以后&#xff0c;所有以前頭疼前端頁面開發的后端程序員&#x1f468;&#x1f3fb;?&#x1f4bb;&#xff0c;都漏出了友善&#x1f60a;微笑&#xff01; 主要我們可以清楚地表達編寫頁面訴求&#xff0c;AI 工具就可以非常準確且迅速的完成代碼的實…

【MyBatis】深入解析 MyBatis:關于注解和 XML 的 MyBatis 開發方案下字段名不一致的的查詢映射解決方案

注解查詢映射 我們再來調用下面的 selectAll() 這個接口&#xff0c;執行的 SQL 是 select* from user_info&#xff0c;表示全列查詢&#xff1a; 運行測試類對應方法&#xff0c;在日志中可以看到&#xff0c;字段名一致&#xff0c;Mybatis 就成功從數據庫對應的字段中拿到…

深入理解Java性能調優與JVM底層機制

Java作為一種廣泛應用的編程語言&#xff0c;在企業級應用中占據著舉足輕重的地位。隨著系統規模的擴大和業務需求的復雜化&#xff0c;性能調優成為了開發過程中不可忽視的一環。Java的性能瓶頸往往并不直接來自代碼本身&#xff0c;而是與JVM&#xff08;Java虛擬機&#xff…

odo18實施——銷售-倉庫-采購-制造-制造外包-整個流程自動化單據功能的演示教程

安裝模塊 安裝銷售 、庫存、采購、制造模塊 2.開啟外包功能 在進入制造應用點擊 配置—>設置 勾選外包&#xff0c;點擊保存 添加信息 一、添加客戶信息 點擊到銷售應用 點擊訂單—>客戶 點擊新建 創建客戶1&#xff0c;及其他客戶相關信息&#xff0c;點…

Logo語言的在線課程學習

Logo語言在線課程學習的探索 引言 在信息技術快速發展的今天&#xff0c;編程已經成為一門重要的技能。尤其隨著人工智能、數據分析和互聯網技術的普及&#xff0c;各種編程語言層出不窮&#xff0c;其中Logo語言以其獨特的教育意義和學習優勢&#xff0c;逐漸受到學校和教育…

情感語音的“開源先鋒”!網易開源

語音合成技術近年來取得了顯著進步&#xff0c;特別是在語音克隆、語音助手、配音服務和有聲讀物等領域。然而&#xff0c;如何讓合成的語音更具情感&#xff0c;更貼近人類的真實表達&#xff0c;一直是這一領域的重要研究方向。今天&#xff0c;我們將為大家介紹一款由網易有…

攝像頭模塊對焦方式的類型

攝像頭模塊的對焦方式直接影響成像清晰度和使用場景適應性&#xff0c;不同技術各有其優缺點。以下是常見對焦方式及其原理、特點和應用場景的詳細說明&#xff1a; ?1. 固定對焦&#xff08;Fixed Focus&#xff09;? ?原理?&#xff1a;鏡頭固定在特定距離&#xff08;…

使用Vue、Nodejs以及websocket搭建一個簡易聊天室

簡易聊天室 說在前面效果展示websocketwebsocket的由來websocket的特點 vue前端靜態結構效果代碼 點擊切換用戶以及該用戶高亮實現思路效果展示 發送消息功能效果展示 連接服務端 Nodejs服務器端實現步驟代碼 說在前面 在學習計算機網絡的時候&#xff0c;看到了websocket這個…

【免費】2005-2019年各地級市綠色專利申請量數據

2005-2019年各地級市綠色專利申請量數據 1、時間2005-2019年 2、來源&#xff1a;國家知識產權局 3、指標&#xff1a;省份、城市、年份、綠色發明專利申請量、綠色實用新型專利申請量 4、范圍&#xff1a;360地級市 5、指標解釋&#xff1a;綠色專利是指涉及環保、新能源…

架構師面試(二十六):系統拆分

問題 今天我們聊電商系統實際業務場景的問題&#xff0c;考查對業務系統問題的分析能力、解決問題的能力和對系統長期發展的整體規劃能力。 一電商平臺在早期階段業務發展迅速&#xff0c;DAU在 10W&#xff1b;整個電商系統按水平分層架構進行設計&#xff0c;包括【入口網關…

2. Qt界面文件原理

本節主要介紹ui文件如何與窗口關聯&#xff0c;并通過隱式連接方式顯示對話框 本文部分ppt、視頻截圖原鏈接&#xff1a;[萌馬工作室的個人空間-萌馬工作室個人主頁-嗶哩嗶哩視頻] 1 UI文件如何與窗口關聯 1.1 mainwindow.cpp的頭文件ui_mainwindow.h 根據編譯原理的基本規…

雅思大作文寫作——詞伙、簡單句、并列句的使用

詞伙是一些可以表達我們常用觀點的單詞組合,這個組合可能不只是2-3個單詞,也可能是很多單詞組成的一個短句。 一、詞伙使用 1. 不要中譯英 2. 重視詞伙,而非單詞 如何替換表達 1. 如果要替換的是一個名詞,如students,則有下面的一些方法: A. 使用替換詞或者詞組:y…