【qt】多窗口开发
多窗口开发
- 一.应用场景
- 二.嵌入的窗口
- 1.设计Widget窗口
- 2.创建窗口
- 3.添加窗口
- 4.总代码
- 三.独立的窗口
- 1.创建窗口
- 2.显示窗口
- 四.总结
一.应用场景
多窗口,顾名思义,有多个窗口可以供我们进行操作!
截个小图,你应该就知道了
OK,话不多说,直接开干,先来设计我们的主窗口
需要蔬菜的可以dd我…
运行结果:
运行结果有点拉,我们来把tabWidget设置为中心组件.
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->tabWidget->clear();//清空页setCentralWidget(ui->tabWidget);setWindowState(Qt::WindowMaximized);//一运行就是最大化ui->tabWidget->setTabsClosable(true);//对tab添加一个关闭按钮}MainWindow::~MainWindow()
{delete ui;
}
运行结果:
但是刚刚我们添加的关闭按钮不能真正的进行关闭,当点击X的时候,会发出一个信号
可以去tabWidget里面去找!
现在我们可以去添加一个槽函数,来实现真正的关闭功能
private slots://按照转到槽的格式 on_发送者_信号 的格式来写会自动的关联,不用我们手动的关联void on_tabWidget_tabCloseRequested(int index);
槽函数的实现:
void MainWindow::on_tabWidget_tabCloseRequested(int index)
{QWidget* widget=ui->tabWidget->widget(index);//拿到widgetwidget->close();//进行关闭
}
当我们后面进行添加了窗口,再来测试这个关闭功能.
二.嵌入的窗口
1.设计Widget窗口
然后添加好action
因为这是widget不是mainwindow所有不能添加工具栏,但是我们可以通过代理来进行添加,代码是万能的!
#include "formwidget.h"
#include "ui_formwidget.h"
#include <QToolBar>//工具栏
#include <QVBoxLayout>//水平布局FormWidget::FormWidget(QWidget *parent) :QWidget(parent),ui(new Ui::FormWidget)
{ui->setupUi(this);QToolBar *Bar=new QToolBar(this);Bar->addAction(ui->actionOpen);Bar->addSeparator();//添加分割线Bar->addAction(ui->actionFont);Bar->addAction(ui->actionCut);Bar->addAction(ui->actionCopy);Bar->addAction(ui->actionPaste);Bar->addAction(ui->actionRepeal);Bar->addAction(ui->actionRewire);Bar->addSeparator();Bar->addAction(ui->actionEXIT);Bar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);//字体显示在下//设置布局QVBoxLayout *vLayout=new QVBoxLayout(this);vLayout->addWidget(Bar);vLayout->addWidget(ui->plainTextEdit);this->setLayout(vLayout);//为窗口添加布局}FormWidget::~FormWidget()
{delete ui;
}
2.创建窗口
注意添加头文件
FormWidget *form=new FormWidget(this);form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
3.添加窗口
//为tabWidget添加页面int ret=ui->tabWidget->addTab(form,QString::asprintf("窗口%d",ui->tabWidget->count()+1));ui->tabWidget->setCurrentIndex(ret);//设置为添加的页面窗口
4.总代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "formwidget.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->tabWidget->clear();setCentralWidget(ui->tabWidget);setWindowState(Qt::WindowMaximized);//一运行就是最大化ui->tabWidget->setTabsClosable(true);//对tab添加一个关闭按钮}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_tabWidget_tabCloseRequested(int index)
{QWidget* widget=ui->tabWidget->widget(index);//拿到widgetwidget->close();//进行关闭
}void MainWindow::on_action_Widget_triggered()
{FormWidget *form=new FormWidget(this);form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁//为tabWidget添加页面int ret=ui->tabWidget->addTab(form,QString::asprintf("窗口%d",ui->tabWidget->count()+1));ui->tabWidget->setCurrentIndex(ret);//设置为添加的页面窗口
}
运行结果;
里面具体的功能不做实现,我们主要是演示多窗口的用法!
三.独立的窗口
1.创建窗口
FormWidget *form=new FormWidget(this);form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁
2.显示窗口
void MainWindow::on_action_WidgetIndent_triggered()
{FormWidget *form=new FormWidget(this);form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁form->show();//以非模态的方式显示
}
运行结果:
这样会出现问题,所以我们要对widget窗口设置标记,使其有对话框的摸样.
void MainWindow::on_action_WidgetIndent_triggered()
{FormWidget *form=new FormWidget(this);form->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候同时销毁form->setWindowFlag(Qt::Window,true);form->setWindowTitle("基于widget的独立窗口");form->show();//以非模态的方式显示
}
运行结果:
四.总结
多窗口其实是比较简单的,主要是设计好,显示的方式确定好,就可以了!
小彩蛋:
有没有点熊猫烧香的感觉,这就是多窗口
没什么好的句子,哈哈
相关文章:

【qt】多窗口开发
多窗口开发 一.应用场景二.嵌入的窗口1.设计Widget窗口2.创建窗口3.添加窗口4.总代码 三.独立的窗口1.创建窗口2.显示窗口 四.总结 一.应用场景 多窗口,顾名思义,有多个窗口可以供我们进行操作! 截个小图,你应该就知道了 OK,话不多说,直接开干,先来设计我们的主窗口 需要蔬菜…...
iOS Hittest 机制和实际应用
Hittest 机制原理 hitTest的原理就是,当我们点击的时候,会触发 window的 hittest方法,在该方法中会首先使用point inside方法判断 点击的地方是否在window范围内,如果在的话,就倒序遍历姿子视图,然后将poi…...
C# 工厂模式学习
工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的接口,而不是通过具体类来实例化对象。工厂模式可以将对象的创建过程封装起来,使代码更具有灵活性和可扩展性。 工厂模式有几种常见的实现方式&…...

AI生成微信职业头像
加油,新时代打工人! 真别说,还挺好看的 https://chatglm.cn/main/alltoolsdetail...
遥感图像的深度学习的任务类型
在遥感图像的深度学习任务中,利用深度学习技术处理和分析遥感图像已经成为一个重要的研究方向。遥感图像来自卫星、无人机等设备,包含了丰富的地球表面信息。以下是遥感图像深度学习中的主要任务类型: 1. 图像分类(Image Classif…...

162.二叉树:填充每个节点的下一个右侧节点指针(力扣)
代码解决 /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NULL), next(NULL) {}Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}Node(int _val, Node* _left, Node* _…...
NLP(20)--知识图谱+实体抽取
前言 仅记录学习过程,有问题欢迎讨论 基于LLM的垂直领域问答方案: 特点:不是通用语料;准确度要求高,召回率可以低(转人工);拓展性和可控性(改变特定内容的回答…...

【mysql数据库】mycat中间件
MyCat 简介 Mycat 是数据库 中间件 。 1、 数据库中间件 中间件 是一类连接软件组件和应用的计算机软件, 以便于软件各部件之间的沟通 。 例子 Tomcat web 中间件 。 数据库 中间件 连接 java 应用程序和数据库 2、 为什么要用 Mycat ① Java 与数据库紧耦合 …...

满帮集团 Eureka 和 ZooKeeper 的上云实践
作者:胡安祥 满帮集团,作为“互联网物流”的平台型企业,一端承接托运人运货需求,另一端对接货车司机,提升货运物流效率。2021 年美股上市,成为数字货运平台上市第一股。根据公司年报,2021 年&a…...

ubuntu中彻底删除mysql (配置文件删除可选)
ubuntu中彻底删除mysql (配置文件删除可选) 对于此类即搜即用的分享文章,也不过多赘述,直接依次按照下面的操作执行即可: 一、删除 mysql 数据文件 sudo rm /var/lib/mysql/ -R二、删除 mysql 配置文件 sudo rm /etc/mysql/ -R三、查看 m…...

根据模板和git commit自动生成日·周·月·季报
GitHub - qiaotaizi/dailyreport: 日报生成器 GitHub - yurencloud/daily: 程序员专用的日报、周报、月报、季报自动生成器! config.json: { "Author": "gitname", "Exclude": ["update:", "add:", "…...

matlab GUI界面设计
【实验内容】 用MATLAB的GUI程序设计一个具备图像边缘检测功能的用户界面,该设计程序有以下基本功能: (1)图像的读取和保存。 (2)设计图形用户界面,让用户对图像进行彩色图像到灰度图像的转换…...
MyBatis 面试题
一、什么是 Mybatis? 1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性 能,灵活度高。 …...

C#根据数据量自动排版标签的样例
这是一个C#根据数据量自动排版标签的样例 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Drawing; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using HslCommuni…...
【网络安全】Web安全基础 - 第一节:使用软件及环境介绍
VMware VMware,是全球云基础架构和移动商务解决方案的佼佼者。 VMware可是一个总部位于美国加州帕洛阿尔托的计算机虚拟化软件研发与销售企业呢。简单来说,它就是通过提供虚拟化解决方案,让企业在数据中心改造和公有云整合业务上更加得心应…...

Mac下载docker
先安装homebrew Mac下载Homebrew-CSDN博客 然后输入以下命令安装docker brew install --cask --appdir/Applications docker 期间需要输入密码。输入完等待即可...
k8s_设置dns
配置k8s dns 在 Kubernetes 集群中,CoreDNS 是默认的 DNS 服务器,它负责处理集群内所有的 DNS 请求。 kubectl edit cm coredns -n kube-system (此命令修改coredns 配置) kubectl describe cm coredns -n kube-system(此命令查看coredns 配…...

翻译《The Old New Thing》- What a drag: Dragging a virtual file (HGLOBAL edition)
What a drag: Dragging a virtual file (HGLOBAL edition) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080318-00/?p23083 Raymond Chen 2008年03月18日 拖拽虚拟文件(HGLOBAL 版本) 现在我们已经对简单的数据…...

SA316系列音频传输模块-传输距离升级音质不打折
SA316是思为无线研发的一款远距离音频传输模块,音频采样率为48K,传输距离可达200M。为了满足更多用户需求,思为无线在SA316基础上进一步增加传输距离推出SA316F30。相比SA316性能,同样其采用48K采样,-96dBm灵敏度&…...

【机器学习】智能选择的艺术:决策树在机器学习中的深度剖析
在机器学习的分类和回归问题中,决策树是一种广泛使用的算法。决策树模型因其直观性、易于理解和实现,以及处理分类和数值特征的能力而备受欢迎。本文将解释决策树算法的概念、原理、应用、优化方法以及未来的发展方向。 🚀时空传送门 &#x…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...