Qt 窗口

news/2025/6/19 18:21:51

第四章 Qt窗口

Qt 窗⼝ 是通过 QMainWindow类 来实现的。
QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类,继承⾃ QWidget 类,并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏(menu bar)、多个⼯具栏(tool bars)、多个浮动窗⼝(铆接部件)(dock widgets)、⼀个状态栏(status bar) 和⼀个 中⼼部件(central widget),它是许多应⽤程序的基础,如⽂本编辑器,图⽚编辑器等。如下图为 QMainwindow 中 各组件所处的位置:
在这里插入图片描述

菜单栏

Qt 中的菜单栏是通过 QMenuBar 这个类来实现的。⼀个主窗⼝最多只有⼀个菜单栏。位于主窗⼝顶
部、主窗⼝标题栏下⾯。
菜单栏中包含菜单. 菜单中包含菜单项.
在这里插入图片描述

创建菜单栏

菜单栏的创建可以借助于 QMainWindow类 提供的 menuBar() 函数来实现。
使⽤ setMenuBar 把菜单栏放到窗⼝中.
QMenu:创建菜单
在 Qt 中,并没有专⻔的菜单项类,可以通过 QAction 类,抽象出公共的动作。如在菜单中添加菜
单项.

代码示例:

快捷键默认:Alt + 字母

	QMenuBar *menu_bar = new QMenuBar();           // 创建菜单栏this->setMenuBar(menu_bar);QMenu *menu1 = new QMenu("文件 (&F)");          // 创建菜单 + 名称 + 快捷键QMenu *menu2 = new QMenu("帮助 (&T)");          // 创建菜单QMenu *menu3 = new QMenu("关于 (&L)");          // 创建菜单QMenu *menu4 = new QMenu("子菜单 (&A)");        // 创建子菜单QAction *action1 = new QAction("新建 (&N)");    // 创建菜单项QAction *action2 = new QAction("菜单项1 (&A)"); // 创建菜单项QAction *action3 = new QAction("菜单项2 (&B)"); // 创建菜单项QAction *action4 = new QAction("菜单项3 (&C)"); // 创建菜单项menu_bar->addMenu(menu1);  // 添加菜单menu_bar->addMenu(menu2);  // 添加菜单menu_bar->addMenu(menu3);  // 添加菜单menu1->addAction(action1); // 添加菜单项menu1->addMenu(menu4);     // 添加子菜单menu4->addAction(action2); // 添加菜单项menu4->addAction(action3); // 添加菜单项menu4->addAction(action4); // 添加菜单项

在这里插入图片描述

如果勾选了自动生成ui文件,qt会自动创建菜单栏,再创建会发生内存泄漏,此时只用获取就行不用再创建
在这里插入图片描述

QMenuBar *menu_bar = this->menuBar(); // 有就获取, 没有就创建
this->setMenuBar(menu_bar);

添加图标

QMenuBar *menu_bar = this->menuBar();this->setMenuBar(menu_bar);QMenu *menu1 = new QMenu("文件 (&F)");menu1->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));QAction *action1 = new QAction("新建 (&N)");    // 创建菜单项action1->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));menu_bar->addMenu(menu1);  // 添加菜单menu1->addAction(action1); // 添加菜单项

菜单的文字会被覆盖,但快捷键不影响
在这里插入图片描述

添加分隔符

	QMenuBar *menu_bar = this->menuBar();this->setMenuBar(menu_bar);QMenu *menu1 = new QMenu("文件");QAction *action1 = new QAction("新建");QAction *action2 = new QAction("打开");menu_bar->addMenu(menu1);menu1->addAction(action1);menu1->addSeparator(); // 添加分隔符menu1->addAction(action2);

在这里插入图片描述

工具栏

⼯具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,它并不是
应⽤程序中必须存在的组件。它是⼀个可移动的组件,它的元素可以是各种窗⼝组件,它的元素通常
以图标按钮的⽅式存在。如下图为⼯具栏的⽰意图:
在这里插入图片描述

创建工具栏

QToolBar() :创建⼯具栏

创建菜单项和工具栏里的快捷键用的都是QAction类;

	QToolBar *tool_bar = new QToolBar();this->addToolBar(tool_bar);QAction *action1 = new QAction("新建"); // 创建菜单项QAction *action2 = new QAction("打开"); // 创建菜单项tool_bar->addAction(action1);tool_bar->addAction(action2);

在这里插入图片描述

添加图片

	QToolBar *tool_bar = new QToolBar();this->addToolBar(tool_bar);QAction *action1 = new QAction("新建"); // 创建菜单项QAction *action2 = new QAction("打开"); // 创建菜单项action1->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));action2->setIcon(QIcon("C:\\Users\\27198\\Downloads\\a.jpg"));tool_bar->addAction(action1);tool_bar->addAction(action2);

文字一样被覆盖
在这里插入图片描述

设置停靠位置

⼯具栏停靠位置的设置有两种⽅式。⼀种是在创建⼯具栏的同时指定停靠的位置,另⼀种是通过
QToolBar类 提供的 setAllowedAreas()函数 来设置。
⽅式⼀:创建⼯具栏的同时指定其停靠的位置。
在创建⼯具栏的同时,也可以设置⼯具栏的位置,其默认位置是在窗⼝的最上⾯;如上述代码,默认
在最上⾯显⽰。⼯具栏允许停靠的区域由 QToolBar类 提供的 allowAreas()函数 决定,其中可以设置
的位置包括:
• Qt::LeftToolBarArea:停靠在左侧
• Qt::RightToolBarArea:停靠在右侧
• Qt::TopToolBarArea:停靠在顶部
• Qt::BottomToolBarArea: 停靠在底部
• Qt::AllToolBarAreas:以上四个位置都可停靠

	QToolBar *tool_bar = new QToolBar();this->addToolBar(Qt::LeftToolBarArea, tool_bar); // 默认停靠QAction *action1 = new QAction("新建"); // 创建菜单项QAction *action2 = new QAction("打开"); // 创建菜单项tool_bar->addAction(action1);tool_bar->addAction(action2);

在这里插入图片描述
其余自行验证;

设置浮动属性

⼯具栏的浮动属性可以通过 QToolBar类 提供的 setFloatable()函数 来设置。setFloatable()函数原
型为:
void setFloatable (bool floatable)
参数:
true:浮动
false:不浮动

浮动:
在这里插入图片描述

设置移动属性

设置⼯具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置。setMovable()函数
原型为:
void setMovable(bool movable)
参数:
true:移动
false:不移动
说明:若设置⼯具栏为不移动状态,则设置其停靠位置的操作就不会⽣效,所以设置⼯具栏的移动属性类似于总开关的效果。


https://dhexx.cn/news/show-5537661.html

相关文章

发立得信息发布系统房屋信息版(php+mysql)V1.0版

# 发立得信息发布系统房屋信息版(phpmysql) 一个轻量级的房屋信息发布平台,基于PHP和MySQL开发,支持用户发布房屋出售/出租信息,以及后台管理功能。 轻量级适合网站开发PHP方向入门者学习,首发版本,未经实际业务流程检…

免费好用的专业提词器有哪些~~~

免费好用的专业提词器来啦,根据文案智能调整滚动快慢,再也不紧张啦 用它,口播小白,也能变大神~~~ 根据文本,智能可快可慢的提词器你见过吗~~~ 领…

STM32嵌套向量中断控制器(NVIC)及外部中断使用案例分析

STM32嵌套向量中断控制器及外部中断使用案例分析 前言什么是中断中断和异常芯片上电之后从哪里开始执行?NVIC详解中断优先级分组中断优先级的设置配置示例中断向量表栈内存操作 STM32F4外部中断原理及使用案例外部中断原理中断事件 外部中断/事件线映射配置外部中断…

Python进程详解

进程是指一个程序的运行实例,它是一个独立的执行环境,拥有自己的内存空间、系统资源和执行状态。Python 中的进程可以通过标准库中的 multiprocessing 模块来创建和管理。 独立性:每个进程都有自己的独立内存空间,一个进程的变量…

【大厂机试题解法笔记】报文响应时间

题目 IGMP 协议中,有一个字段称作最大响应时间 (Max Response Time) ,HOST收到查询报文,解折出 MaxResponseTime 字段后,需要在 (0,MaxResponseTime] 时间 (s) 内选取随机时间回应一个响应报文,如果在随机…

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…

删除远程已经不存在但本地仍然存在的Git分支

1. 获取远程分支列表 首先,确保你获取了远程仓库的最新分支信息: git fetch -p -p 参数会自动清理本地仓库中那些在远程已经被删除的分支的引用。 2. 查看本地分支与远程分支的对比 运行以下命令来查看哪些本地分支没有对应的远程分支: …

【使用LLM搭建系统】5 处理输入: 链式 Prompt Chaining Prompts

本章内容主要介绍了将复杂任务拆分为多个子任务(链式Prompt)的方法及其优势。尽管高级语言模型像GPT - 4擅长一次性遵循复杂指令,但有时拆分任务更可取。通过两个比喻来阐述原因: 一次烹饪复杂菜肴与分阶段烹饪:一次性…

【CANN全新升级】CANN创新MLAPO算子,DeepSeek模型推理效率倍增

MoE模型中的MLA架构 DeepSeek系列模型凭借其创新性的MLA(Multi-Head Latent Attention)架构,替代了传统的MHA(Multi Head Attention),显著降低了推理时的KV Cache开销,大幅提升了推理效率&…

SDC命令详解:使用set_wire_load_model命令进行约束

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 目录 指定线负载模型名 指定搜索库 指定最大、最小条件 指定对象列表 set_wire_load_model命令用于显式指定一个线负载模型(设置了对象的wire_loa…