当前位置: 首页 > news >正文

Qt实现MDI应用程序

本文记录Qt实现MDI应用程序的相关操作实现

目录

1.MDM模式下窗口的显示两种模式

1.1TabbedView 页签化显示

1.2 SubWindowView 子窗体显示

堆叠cascadeSubWindows

平铺tileSubWindows

2.MDM模式实现记录

2.1. 窗体继承自QMainWindow

2.2.增加组件MdiArea

2.3.定义统一TFormDoc作为子窗体

2.4. MDI父窗体上定义action,点击时 转换为TFormDoc窗体,进行对应方法的处理

2.5 将子窗体中的文本框编辑信号,绑定到窗体的QWidget 的公有槽函数 setWindowModified(bool),会修改 windowModified 属性的值。

2.6. 子窗体激活事件

2.7. MDI模式切换


1.MDM模式下窗口的显示两种模式

1.1TabbedView 页签化显示

1.2 SubWindowView 子窗体显示

两种样式 堆叠和平铺

堆叠cascadeSubWindows

平铺tileSubWindows

2.MDM模式实现记录

2.1. 窗体继承自QMainWindow

void MdiMainWindow::closeEvent(QCloseEvent *event)
{ui->mdiArea->closeAllSubWindows();event->accept();
}MdiMainWindow::MdiMainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MdiMainWindow)
{ui->setupUi(this);setCentralWidget(ui->mdiArea);setWindowState(Qt::WindowMaximized);
}

2.2.增加组件MdiArea

2.3.定义统一TFormDoc作为子窗体

2.4. MDI父窗体上定义action,点击时 转换为TFormDoc窗体,进行对应方法的处理

void MdiMainWindow::on_actPaste_triggered()
{TFormDoc *form  = (TFormDoc*)ui->mdiArea->activeSubWindow()->widget();form->textPaste();
}

2.5 将子窗体中的文本框编辑信号,绑定到窗体的QWidget 的公有槽函数 setWindowModified(bool),会修改 windowModified 属性的值。

 connect(ui->plainTextEdit,&QPlainTextEdit::modificationChanged,this,&QWidget::setWindowModified);

2.6. 子窗体激活事件

激活的时候,在statusBar上显示一下信息

void MdiMainWindow::on_mdiArea_subWindowActivated(QMdiSubWindow *arg1)
{Q_UNUSED(arg1);if(ui->mdiArea->subWindowList().size()==0){ui->actCut->setEnabled(false);ui->actCopy->setEnabled(false);ui->actPaste->setEnabled(false);ui->actFont->setEnabled(false);ui->statusbar->clearMessage();}else{TFormDoc *form  = static_cast<TFormDoc*>(ui->mdiArea->activeSubWindow()->widget());ui->statusbar->showMessage(form->currentFileName());}
}

2.7. MDI模式切换

void MdiMainWindow::on_actViewMode_triggered(bool checked)
{if(checked)//多页显示模式ui->mdiArea->setViewMode(QMdiArea::TabbedView);elseui->mdiArea->setViewMode(QMdiArea::SubWindowView);ui->mdiArea->setTabsClosable(checked);ui->actCascade->setEnabled(!checked);ui->actTile->setEnabled(!checked);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何在gitee上创建远程仓库?
  • 对于GPT-5在一年半后发布的期待!
  • 数据库管理-第218期 服务器内存(20240711)
  • 【C语言】移位操作详解 - 《凌波微步 ! 》
  • JS-11G1端子排静态时间继电器 约瑟JOSEF
  • Centos忘记密码,重置root密码
  • R语言学习笔记7-列表
  • Raw Socket(二)循环队列收发数据
  • pc端注册页面 密码校验规则
  • 解决ESLint和Prettier冲突的问题
  • Python 是一种用途广泛的编程语言,应用于各个领域
  • 观察者模式:构建响应式系统的基石
  • 51单片机-第三节-LCD1602调试工具,矩阵键盘
  • 【eNSP模拟实验】单臂路由实现VLAN间通信
  • 【iOS】—— 继承者链
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《Java编程思想》读书笔记-对象导论
  • CentOS 7 防火墙操作
  • Java,console输出实时的转向GUI textbox
  • JavaScript 一些 DOM 的知识点
  • markdown编辑器简评
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React+TypeScript入门
  • spring学习第二天
  • Swift 中的尾递归和蹦床
  • Vue.js源码(2):初探List Rendering
  • webgl (原生)基础入门指南【一】
  • 开源SQL-on-Hadoop系统一览
  • 如何在GitHub上创建个人博客
  • 写给高年级小学生看的《Bash 指南》
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​字​节​一​面​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #FPGA(基础知识)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (10)ATF MMU转换表
  • (7) cmake 编译C++程序(二)
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • *** 2003
  • .apk文件,IIS不支持下载解决
  • .htaccess 强制https 单独排除某个目录
  • .net core + vue 搭建前后端分离的框架
  • .Net接口调试与案例
  • 。Net下Windows服务程序开发疑惑
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @property括号内属性讲解
  • [2669]2-2 Time类的定义
  • [ACTF2020 新生赛]Include
  • [AI 大模型] 百度 文心一言
  • [CISCN 2023 初赛]go_session