QT 菜單欄設計使用方法

目錄

常用設置函數

多個QAction的單選設置

???????菜單相關類

??????? 系統菜單的生成和響應

使用代碼添加系統菜單

使用UI設計器設計系統菜單


使用Qt設計及界面時,常用的兩種方式添加菜單,第一使用UI界面添加,第二種 在代碼中添加菜單。

常用設置函數

action->setChecked(true);?? // 設置為選中狀態

??????? 多個QAction的單選設置

void MainWindow::initUi()

{

??? QActionGroup* toolGroup = new QActionGroup(this);

??? toolGroup->addAction(this->ui->drawLine);

??? toolGroup->addAction(this->ui->drawCircle);

??? toolGroup->addAction(this->ui->drawEllipse);

??? toolGroup->addAction(this->ui->selectTool);

??? toolGroup->addAction(this->ui->fillPolygon);

??? toolGroup->addAction(this->ui->fillFence);

??? toolGroup->addAction(this->ui->drawPolygon);

??? toolGroup->setExclusionPolicy(QActionGroup::ExclusionPolicy::ExclusiveOptional);

}

???????菜單相關類

QMenuBar?--菜單欄類,即下圖中紅色區域標記,菜單欄類給窗口提供水平菜單欄,此菜單欄占用窗口上方區域,垂直高度不變,水平寬度為窗口寬度,可隨窗口大小變化而變化。如下圖中“測試”,“test1”,"test2"所在的欄幾位QMenuBar

QMenu?--菜單項,即下圖中綠色區域,下圖中“測試”,"test1","test2"都是一個獨立的菜單,包含各個子菜單。QMenu還可以用來創建彈出菜單

QAction?--子菜單,即下圖中藍色區域標記的內容,一個子菜單對應一個操作。

??????? 系統菜單的生成和響應

使用代碼添加系統菜單

示例源碼:

.h文件

#ifndef ????MAINWINDOW_H

#define ???MAINWINDOW_H

#include ?<QMainWindow>

#include ?<QMenuBar>

QT_BEGIN_NAMESPACE

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class ?MainWindow : public QMainWindow

{

??? Q_OBJECT

public:

??? MainWindow(QWidget *parent = nullptr);

??? ~MainWindow();

??? //菜單欄

??? QMenuBar *pMenuBar;

??? //菜單項

??? QMenu *pMenuTest;

??? QMenu *pMenuTest1;

??? QMenu *pMenuTest2;

??? //子菜單

??? QAction *pActionTest;

??? QAction *pActionTest1;

??? QAction *pActionTest2;

??? QAction *pActionTest3;

??? QAction *pActionTest4;

??? QAction *pActionTest5;

??? QAction *pActionTest6;

public slots:

?? ?//菜單響應函數

??? void OnActionTest();

??? void OnActionTest1();

private:

??? Ui::MainWindow *ui;

};

#endif ????????????//MAINWINDOW_H

.cpp文件

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <QDialog>

//是否啟用QMainWindow自帶的菜單欄

//#define USE_DEFAULT_MENU_BAR

MainWindow::MainWindow(QWidget *parent)

??? : QMainWindow(parent)

??? , ui(new Ui::MainWindow)

{

??? ui->setupUi(this);

??? //指定菜單欄

#ifdef ??USE_DEFAULT_MENU_BAR

??? //添加菜單欄(此處添加為的為QMainWindow自帶的菜單)

??? pMenuBar = this->menuBar();

#else

??? //添加自定義菜單

??? pMenuBar = new QMenuBar(this);

#endif

??? //定義菜單項

??? //&n)代表快捷方式,當窗口獲得焦點時按alt+n即可打開測試菜單項

??? pMenuTest = new QMenu("測試(&n)",this);

??? pMenuTest1 = new QMenu("test1",this);

??? pMenuTest2 = new QMenu("test2",this);

??? //定義子菜單

??? //&s)為子菜單快捷鍵,當打開該菜單項后,按下‘s’鍵即可響應

??? pActionTest = new QAction("測試(&s)",this);

?? ?//新建一個帶圖標的菜單項,圖標使用資源文件中的資源

??? pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),"測試1",this);

??? pActionTest2 = new QAction("測試2",this);

??? pActionTest3 = new QAction("測試3(&Y)",this);

??? pActionTest4 = new QAction("測試4",this);

??? pActionTest5 = new QAction("測試5(&M)",this);

??? pActionTest6 = new QAction("測試6",this);

??? //將菜單項添加到子菜單

??? pMenuTest->addAction(pActionTest);

??? pMenuTest->addAction(pActionTest1);

?? ?//在菜單項之間添加分割線

??? pMenuTest->addSeparator();

??? pMenuTest->addAction(pActionTest2);

??? pMenuTest1->addAction(pActionTest3);

??? pMenuTest1->addAction(pActionTest4);

??? pMenuTest2->addAction(pActionTest5);

??? pMenuTest2->addAction(pActionTest6);

??? //將子菜單添加到菜單欄

??? pMenuBar->addMenu(pMenuTest);

??? pMenuBar->addMenu(pMenuTest1);

??? pMenuBar->addMenu(pMenuTest2);

#ifndef ???USE_DEFAULT_MENU_BAR

?? ?//當不使用QMainWindow自帶的菜單欄時,必須要加上此行

??? setMenuBar(pMenuBar);

#endif

??? //添加菜單響應函數

??? connect(pActionTest,&QAction::triggered,this,&MainWindow::OnActionTest);

??? connect(pActionTest1,&QAction::triggered,this,&MainWindow::OnActionTest);

}

//菜單響應函數

void MainWindow::OnActionTest()

{

??? QDialog ?dlg;

??? dlg.setWindowTitle("測試菜單響應");

??? dlg.exec();

}

void MainWindow::OnActionTest1()

{

??? QDialog dlg;

??? dlg.setWindowTitle("測試菜單響應");

??? dlg.exec();

}

MainWindow::~MainWindow()

{

??? delete ui;

}

上面的代碼中定義了兩種創建系統菜單的方式:調用QMainWindow自帶的菜單欄和自己新建菜單欄,由第6行定義的宏控制,顯示效果相同。

  第25行為“測試”子菜單添加快捷鍵,當窗口獲得焦點時按alt+n可展開“測試”子菜單。

  第31行為“測試”子菜單“測試”菜單項添加快捷鍵,當“測試”子菜單彈出后按‘s’鍵,程序即可做出響應。

  第33行為“測試”子菜單的“測試2”菜單項添加了圖標。

  第44行為“測試”子菜單的“測試2”和“測試3”之間添加了分割線。

使用UI設計器設計系統菜單

1、添加菜單項

直接輸入菜單項名稱,然后回車即可。

2、為菜單項設置圖標

在動作編輯器上,右鍵選擇編輯,然后添加圖標

如果想在圖標欄添加該菜單的快捷圖標,直接將該動作項拖放只圖標欄即可。

3、事件響應函數

我們的對象名稱為:actionOpenFile,默認情況我們只需要添加槽函數:

public slots:

??? void on_actionOpenFile_triggered();

當菜單被點擊時,該事件將出發,槽函數命名規則為:on_對象名稱_triggered,如果你覺得這個名字太長,可以自定義槽函數,然后通過connect進行連接:

connect(ui.actionOpenFile,? SIGNAL(triggered()), this, SLOT(OnActionOpenFile()));

進入“設計”頁面,進入如下圖所示的界面,具體操作方法見如下兩張圖,注意:輸入菜單名稱后一定要按“Enter”鍵才能生效。

注意: 子菜單可能無法輸入中文,可在Action Editor 中修改文本與提示信息

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

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

相關文章

AIGC領域AI藝術,打造個性化藝術作品

AIGC領域AI藝術,打造個性化藝術作品 關鍵詞:AIGC、AI藝術、生成對抗網絡、個性化創作、深度學習、藝術風格遷移、創意計算 摘要:本文深入探討了AIGC(人工智能生成內容)在藝術創作領域的應用,重點分析了如何利用AI技術打造個性化藝術作品。文章從技術原理出發,詳細解析了生…

基于Flask+Jinja2的快捷教務系統(后端鏈接到新版正方教務系統)

快捷教務系統&#xff08;Easy Educational Administration Management System, EasyEAMS&#xff09; 項目簡介 EasyEAMS 是一個基于 Flask Jinja2 的現代化教務系統 Web 應用。學生可通過網頁端登錄&#xff0c;在線查詢個人信息、成績、課表、學業生涯、通知、選課等。系…

EDM自動化與出海獨立開發實用教程

隨著互聯網全球化發展&#xff0c;越來越多的獨立開發者&#xff08;Indie Developer&#xff09;選擇將自己的產品推向海外市場。如何高效地獲客、激活用戶、提升轉化率&#xff0c;成為出海過程中必須解決的問題。EDM&#xff08;電子郵件營銷&#xff09;自動化&#xff0c;…

「日拱一碼」017 深度學習常用庫——TensorFlow

目錄 基礎操作 張量操作&#xff1a; tf.constant 用于創建常量張量 tf.Variable 用于創建可訓練的變量張量 tf.reshape 可改變張量的形狀 tf.concat 可將多個張量沿指定維度拼接 tf.split 則可將張量沿指定維度分割 數學運算&#xff1a; tf.add 張量的加運算 tf.su…

ARM DStream仿真器腳本常用命令

以下是ARM DStream仿真器腳本中常用的命令及其功能分類&#xff0c;結合調試流程和典型應用場景整理&#xff1a; ?? 一、連接與初始化命令 connect 建立與目標設備的連接&#xff0c;需指定接口類型&#xff08;如JTAG/SWD&#xff09;和處理器核心。 示例&#xff1a;conne…

vscode 調試unity

lanch.json { “version”: “0.2.0”, “configurations”: [ { “name”: “Attach to Unity”, “type”: “vstuc”, “request”: “attach” } ] }

金融IT入門知識點

銀行金融IT核心知識點全解析&#xff1a;架構、技術與實踐 一、金融IT的戰略地位與行業特性 金融IT作為銀行業務的核心支撐體系&#xff0c;其發展水平直接決定了銀行服務的效率、安全性與創新能力。截至 2025年&#xff0c;中國銀行業線上化業務占比已達97%&#xff0c;手機銀…

C++——手撕智能指針、單例模式、線程池、String

智能指針今天我們來學習一下C中的智能指針&#xff0c;如果有人不知道C中的智能指針的概念的話&#xff1a;C智能指針是一種基于RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;資源獲取即初始化&#xff09;機制的高級內存管理工具&#xff0c;用于自動化…

Mybatis----留言板

基礎項目&#xff1a;留言板 截止到目前為止&#xff0c;我們已經學習了 Spring&#xff08;只學習了DI&#xff09;、Spring MVC、SpringBoot、Mybatis 這些知識了&#xff0c;已經滿足了做簡單項目的基本要求了&#xff0c;所以接下來我們就從0到1實現表白墻項目。 需求分析…

Web-API-day3 DOM事件進階

一、 事件流 1.事件冒泡 const fa document.querySelector(.father)const son document.querySelector(.son)document.addEventListener(click, function () {alert(我是爺爺)})fa.addEventListener(click, function () {alert(我是爸爸)})son.addEventListener(click, fun…

小波增強型KAN網絡 + SHAP可解釋性分析(Pytorch實現)

效果一覽一、傳統KAN網絡的痛點與突破 1. 傳統KAN的局限性 傳統Kolmogorov-Arnold網絡&#xff08;KAN&#xff09;雖在理論上有可靠的多變量函數逼近能力&#xff0c;但存在顯著瓶頸&#xff1a; 計算效率低&#xff1a;訓練速度慢于MLP&#xff0c;資源消耗大&#xff0c;尤其…

tomcat部署多個端口以及制定路徑部署-vue3

vue3項目tomcat部署記錄 使用hash路由 字符串拼接的圖片地址可以使用import.meta.env.BASE_URL 默認8080 如果部署地址為8080/xc 則設置 vite.config.js中設置base為’/xc/’ outDir設置為xc 打包產物直接拖到webapps目錄下 如果另開一個端口 如8081 設置根目錄訪問 conf/ser…

LeetCode三數之和-js題解

給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請你返回所有和為 0 且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組。 示例 1&…

Flink SQLServer CDC 環境配置與驗證

一、SQL Server 數據庫核心配置 1. 啟用 CDC 功能&#xff08;Change Data Capture&#xff09; SQL Server CDC 依賴數據庫級別的 CDC 功能及表級別的捕獲配置&#xff0c;需按以下步驟啟用&#xff1a; 啟用數據庫 CDC -- 以管理員身份連接數據庫 USE master; GO-- 檢查數…

軟考(軟件設計師)存儲管理—設備管理,磁盤調度

I/O軟件的核心目標是管理硬件差異、提供統一接口、實現高效可靠的數據傳輸。 核心目標&#xff1a; 設備無關性&#xff1a; 應用程序無需關心具體硬件細節。錯誤處理&#xff1a; 處理硬件錯誤和傳輸異常。同步/異步傳輸&#xff1a; 支持阻塞&#xff08;等待完成&#xff09…

[C語言] C語言數學函數庫概覽

C語言數學函數庫概覽 文章目錄 C語言數學函數庫概覽一、概述二、基本數學函數詳解1. 平方根函數 sqrt(x)2. 冪函數 pow(x, y)3. 絕對值函數 fabs(x)4. 向上取整函數 ceil(x)5. 向下取整函數 floor(x) 三、三角函數與雙曲函數詳解1. 正弦函數 double sin(double x)2. 余弦函數 d…

【簡單三步】Stable diffusion Webai本地部署無法加載模型并報openai/clip-vit-large-patch14錯誤的解決方法

問題描述 Stable diffusion Webai本地部署成功后&#xff0c;手動加載本地模型checkpoint時&#xff0c;始終無法加載進去&#xff0c;確定模型存放位置無誤&#xff08;位于models\Stable-diffusion&#xff09;查看cmd窗口時&#xff0c;發現一個報錯提示&#xff1a;Can’t …

Java 命令行參數詳解:系統屬性、JVM 選項與應用配置

Java 命令行參數詳解&#xff1a;系統屬性、JVM 選項與應用配置 在 Java 應用啟動命令中&#xff0c;如&#xff1a; java -jar -Dserver.port8088 xdr-demo-1.0-SNAPSHOT-assembly.jar &-Dserver.port8088是一個 系統屬性&#xff08;System Property&#xff09; 設置。…

【論文筆記】World Models for Autonomous Driving: An Initial Survey

原文鏈接&#xff1a;https://ieeexplore.ieee.org/abstract/document/10522953 1. 世界模型的發展 A. 世界模型的結構基礎 世界模型包含4個關鍵組件&#xff0c;以模擬人類連貫的思考和決策過程。 a&#xff09;感知模塊使用如變分自編碼器&#xff08;VAE&#xff09;、掩…

Spring Cloud Config(微服務配置中心詳解)

關鍵詞&#xff1a;Spring Cloud Config、配置中心、遠程倉庫、動態刷新、加密解密 ? 摘要 在微服務架構中&#xff0c;隨著服務數量的增加&#xff0c;統一管理各服務的配置信息變得尤為重要。傳統的本地配置文件方式難以滿足多環境、多實例、集中化的需求。 Spring Cloud …