【qt】多窗口开发

2024-06-01 15:28
文章标签 qt 开发 多窗口

本文主要是介绍【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】多窗口开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021385

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife