Qt——主窗口 mainWindow

主窗口 mainWindow

前面學習的所有代碼,都是基于QWidget控件,其更多的是作為別的窗口的部分

現在來學習QMainWindow,即主窗口,其包含以下屬性

  • Window Title:標題欄
  • Menu Bar:菜單欄
  • Tool Bar Area:工具欄
  • Dock Widget Area:鉚接部件(子窗口)
  • Central Widget:中央窗口
  • Status Bar:狀態欄

在這里插入圖片描述

菜單欄 Menu Bar

在這里插入圖片描述

一個窗口,只能有一個菜單欄,但是可以有很多個菜單,每一個菜單又可以很多菜單項

例如,用代碼創建菜單欄、菜單、菜單項、子菜單、分割線、圖標:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 獲取菜單欄QMenuBar* menuBar = this->menuBar();// 創建菜單,并設置快捷鍵QMenu* menu1 = new QMenu("文件 (&F)");QMenu* menu2 = new QMenu("設置 (&S)");QMenu* menu3 = new QMenu("關于 (&A)");menuBar->addMenu(menu1);menuBar->addMenu(menu2);menuBar->addMenu(menu3);// 創建菜單項QAction* act1 = new QAction("新建");QAction* act2 = new QAction("保存");QAction* act3 = new QAction("退出");menu1->addAction(act1);menu1->addSeparator();  // 添加分割線menu1->addAction(act2);menu1->addSeparator();  // 添加分割線menu1->addAction(act3);// 為菜單項添加圖片act1->setIcon(QIcon(":/open"));act2->setIcon(QIcon(":/save"));// 為菜單添加圖片menu1->setIcon(QIcon(":/file"));// 設置菜單項快捷鍵act1->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_N));act2->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_B));act3->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_E));// 創建子菜單QMenu* menu_child = new QMenu("高級 (&L)");QAction* act4 = new QAction("字體");QAction* act5 = new QAction("語言");menu_child->addAction(act4);menu1->addSeparator();  // 添加分割線menu_child->addAction(act5);// 將子菜單添加到菜單 menu2menu2->addMenu(menu_child);connect(act1, &QAction::triggered, this, [](){qDebug() << "新建文件";});connect(act2, &QAction::triggered, this, [](){qDebug() << "保存文件";});connect(act3, &QAction::triggered, this, [](){qDebug() << "退出窗口";});connect(act3, &QAction::triggered, this, &QMainWindow::close);
}
  • QAction::triggered:該信號為菜單項被用戶執行時觸發
  • 可以通過& + 按鍵的方式,設置菜單的快捷鍵,此時,按下Alt + 按鍵即可打開對應的菜單
  • 盡管也可以通過& + 按鍵的方式,設置菜單項的快捷鍵,但是如果要使用,就必須先展開對應的菜單。 因此對于**QAction快捷鍵的設置,優先使用setShortcut**
  • 如果為菜單設置圖片,那么菜單的文本就不會顯示;如果為菜單項設置圖片,菜單項的圖片和文本都可以顯示

效果:

在這里插入圖片描述


工具欄 Tool Bar

一個窗口,可以沒有工具欄,可以有工具欄,也可以有多個

一個窗口,默認不自帶工具欄,需要手動創建

例如:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 創建工具欄QToolBar* toolBar = new QToolBar();this->addToolBar(toolBar);// 創建工具項QAction* act1 = new QAction("打開文件");QAction* act2 = new QAction("保存文件");act1->setIcon(QIcon(":/open"));act2->setIcon(QIcon(":/save"));// 將工具項 添加到 工具欄toolBar->addAction(act1);toolBar->addAction(act2);connect(act1, &QAction::triggered, this, [](){qDebug() << "打開文件";});connect(act2, &QAction::triggered, this, [](){qDebug() << "保存文件";});
}
  • 如果工具項被設置了圖標,那么其文本就會被隱藏

  • 隱藏的文本會以toolTip的方式存在

  • 工具欄和菜單欄往往搭配使用,工具欄中的工具項也可以在菜單欄中出現

  • 工具欄可以被拖動,我們可以對其相關屬性進行設置:

    • 可以設置工具欄出現的初始位置。可以在addToolBar中添加選項來設置

      • Qt::LeftToolBarArea 停靠在左側
      • Qt::RightToolBarArea 停靠在右側
      • Qt::TopToolBarArea 停靠在頂部
      • Qt::BottomToolBarArea 停靠在底部
      • Qt::AllToolBarAreas 以上四個位置都可停靠
    • 可以設置工具欄允許停靠在哪些邊緣

      • 通過函數設置:setAllowedAreas()
    • 可以設置工具欄是否允許浮動

      • 通過函數設置:setFloatable()
    • 可以設置工具欄是否可以移動

      • 通過函數設置:setMovable()

效果:

在這里插入圖片描述


狀態欄 Status Bar

QMainWindow自帶狀態欄Status Bar,且一個窗口狀態欄只存在一個

例如:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 獲取狀態欄QStatusBar* statusBar = this->statusBar();// 添加臨時控件QLabel* label = new QLabel("這是一條臨時消息");statusBar->addWidget(label, 1);// 添加永久控件QProgressBar* progress = new QProgressBar();progress->setTextVisible(true);progress->setRange(0, 100);progress->setValue(40);statusBar->addPermanentWidget(progress, 2);// 線是一條信息statusBar->showMessage("這是一條顯示信息", 3000);
}
  • addWidget:向狀態欄添加一個臨時控件,這個控件可以被showMessage()顯示的信息覆蓋。后面的數字為拉伸系數
  • addPermanentWidget:向狀態欄添加一個永久控件,這個控件不可以被showMessage()顯示的信息覆蓋。后面的數字為拉伸系數
  • showMessage:在狀態欄顯示一條消息,后面的數字為顯示時間(ms),默認為0,0為永久顯示

浮動窗口 Dock Widget

可以像正常窗口一樣,給浮動窗口內部,添加一些其他控件

但是不能直接給這個浮動窗口添加子控件,而是需要創建出一個單獨的QWidget,將控件添加到QWidget

最后再將QWidget添加到子窗口中

例如:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 創建子窗口,并放置在主窗口頂部QDockWidget* dock = new QDockWidget("子窗口");// 只允許停靠在頂部和右側dock->setAllowedAreas(Qt::DockWidgetArea::RightDockWidgetArea | Qt::DockWidgetArea::TopDockWidgetArea);this->addDockWidget(Qt::DockWidgetArea::TopDockWidgetArea, dock);// 添加一個容器窗口QWidget* container = new QWidget();QVBoxLayout* layout = new QVBoxLayout();container->setLayout(layout);QLabel* label = new QLabel("這是一段文本");layout->addWidget(label);// 將容器窗口添加到子窗口中dock->setWidget(container);
}

效果:

在這里插入圖片描述

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

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

相關文章

無訓練神經網絡影響下的智能制造

摘要 未訓練神經網絡&#xff08;Untrained Neural Networks, UNNs&#xff09;作為近年來人工智能領域的新興范式&#xff0c;正在逐步改變智能制造的發展路徑。不同于傳統深度學習依賴大規模標注數據與高性能計算資源的模式&#xff0c;UNNs 借助網絡結構自身的歸納偏置與初…

微服務自動注冊到ShenYu網關配置詳解

一、配置逐行詳解 shenyu:register:registerType: http # 注冊中心類型:使用 HTTP 協議進行注冊serverLists: ${shenyu-register-serverLists} # ShenYu Admin 的地址列表props:username: ${shenyu-register-props-username} # 注冊認證用戶名password: ${shenyu-regi…

時序數據庫IoTDB的列式存儲引擎

在大數據時代&#xff0c;工業物聯網&#xff08;IIoT&#xff09;場景正以前所未有的速度生成著海量的時間序列數據。這些數據通常由成千上萬的傳感器&#xff08;如溫度、壓力、轉速傳感器&#xff09;持續不斷采集產生&#xff0c;它們具備鮮明的特點&#xff1a;數據時間屬…

JavaScript手錄18-ajax:異步請求與項目上線部署

前言&#xff1a;軟件開發流程 AJAX&#xff1a;前端與后端的數據交互 前后端協作基礎 Web應用的核心是“數據交互”&#xff0c;前端負責展示與交互&#xff0c;后端負責處理邏輯與數據存儲&#xff0c;二者通過網絡請求協作。 &#xff08;1&#xff09;項目開發流程與崗…

HTB 賽季7靶場 - Enviroment

最近所幸得點小閑&#xff0c;補個檔嘞&#xff01;~nmap掃描 nmap -F -A 10.10.11.67dirsearch掃描發現login接口 http://environment.htb/login構造如下payload&#xff0c;讓程序報錯&#xff0c;其原理在于缺失了rember后會導致報錯&#xff0c;從而告訴我們一個新的參數ke…

源碼編譯部署 LAMP 架構詳細步驟說明

源碼編譯部署 LAMP 架構詳細步驟說明 一、環境準備 1. 關閉防火墻和SELinux [roothrz ~]# systemctl stop firewalld [roothrz ~]# systemctl disable firewalld [roothrz ~]# setenforce 02. 配置YUM網絡源 [roothrz ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://m…

機器學習----PCA降維

一、PCA是什么&#xff1f;主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是機器學習中最常用的降維技術之一&#xff0c;它通過線性變換將高維數據投影到低維空間&#xff0c;同時保留數據的最重要特征。PCA由卡爾皮爾遜于1901年發明&#x…

ReactNative開發實戰——React Native開發環境配置指南

一、開發前準備 1. macOS平臺基礎工具安裝 brew install node18 brew install watchman brew install cocoapods2. 代理配置 npm config set proxy http://127.0.0.1:7890 npm config set https-proxy http://127.0.0.1:7890# 新增擴展建議&#xff08;可選配置&#xff09; ec…

差速轉向機器人研發:創新驅動的未來移動技術探索

在科技日新月異的今天&#xff0c;機器人技術作為智能制造與自動化領域的核心驅動力&#xff0c;正以前所未有的速度發展。其中&#xff0c;差速轉向機器人以其獨特的運動機制和廣泛的應用前景&#xff0c;成為了科研與工業界關注的焦點。本文旨在探討差速轉向機器人研發進展&a…

Wireshark捕獲電腦與路由器通信數據,繪制波形觀察

一、準備工作 電腦發出數據的波形圖繪制在我的另一篇博客有詳細介紹&#xff1a; 根據Wireshark捕獲數據包時間和長度繪制電腦發射信號波形-CSDN博客 路由器發送給電腦數據的波形圖繪制也在我的另一篇博客有詳細介紹&#xff1a; 根據Wireshark捕獲數據包時間和長度繪制路由…

汽車ECU實現數據安全存儲(機密性保護)的一種方案

一、 綜述在車輛ECU中總是有一些密鑰或重要數據需進行機密性保護&#xff0c;但因產品選型、成本等考慮&#xff0c;導致一些ECU的芯片不支持硬件安全模塊&#xff08;例如HSM、TEE等&#xff09;。此時&#xff0c;為保障數據的機密性&#xff0c;可考慮通過軟件實現數據的安全…

AI 效應: GPT-6,“用戶真正想要的是記憶”

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

云計算學習100天-第25天

部署LNMP環境安裝軟件#在前一天已經安裝nginx的基礎上安裝MariaDB&#xff0c;php和php-fpm yum -y install mariadb mariadb-server mariadb-devel php php-mysqlnd php-fpm #mariadb&#xff08;數據庫客戶端軟件&#xff09;、mariadb-server&#xff08;數據庫服務器軟件&…

細化的 Spring Boot 和 Spring Framework 版本對應關系

注:本文由ai輔助,個人整理,有問題可留言 Spring Boot 3.x 系列 (基于 Spring Framework 6.x) Spring Boot 版本 對應的 Spring Framework 版本 Java 支持版本 3.1.5 (最新) 6.0.15 Java 17+ 3.1.4 6.0.14 Java 17+ 3.1.3 6.0.12 Java 17+ 3.1.2 6.0.11 Java 17+ 3.1.1 6.0.…

PyTorch API 1

文章目錄torch張量創建操作索引、切片、連接與變異操作加速器生成器隨機采樣原地隨機采樣準隨機采樣序列化并行計算局部禁用梯度計算數學運算常量逐點運算歸約操作比較運算頻譜操作其他操作BLAS 和 LAPACK 運算遍歷操作實用工具符號數字導出路徑控制流優化方法操作符標簽torch.…

基于FPGA的實時圖像處理系統(2)——VGA顯示彩條和圖片

VGA顯示彩條和圖片 文章目錄VGA顯示彩條和圖片一、VGA簡介二、功能設計1、彩條設計2、圖片設計三、結果展示四、代碼一、VGA簡介 VGA(Video Graphics Array)是IBM在1987年隨PS/2機?起推出的?種視頻&#xff0c;具有分辨率?、顯?速率快、顏?豐富等優點&#xff0c;在彩 ?…

【網絡運維】Linux 文本處理利器:sed 命令

Linux 文本處理利器&#xff1a;sed 命令 sed 簡介 sed&#xff08;Stream Editor&#xff09;是一款非交互式的流編輯器&#xff0c;誕生于 1973–1974 年間的貝爾實驗室&#xff0c;由 McMahon 開發。它專為文本處理而生&#xff0c;功能強大&#xff0c;是 Linux 文本處理常…

week2-[一維數組]出現次數

week2-[一維數組]出現次數 題目描述 給定 NNN 個整數A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。請求出這 NNN 個數中出現次數最多的數的出現次數&#xff0c;以及出現次數最少的數的出現次數。 輸入格式 讀入包括 222 行。第一行只有 111 個整數 NNN&#xff0c;表示數…

力扣 hot100 Day79

215. 數組中的第K個最大元素 給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 k 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 class…

C++圍繞音視頻相關的資料都有哪些?如何進行學習

音視頻技術涉及的內容廣泛而深入。我會根據自己的知識給你提供一個系統性的音視頻相關資料梳理&#xff0c;主要分為學習路徑與核心知識、開源項目與實戰、開發者資源以及熱點與趨勢幾個方面&#xff0c;希望能幫助你高效地學習和探索。 先用一個表格來概覽主要的學習方向和資…