Qt实现记事本(一)

Qt实现记事本(二)

目标

使用Qt实现记事本功能,具有”文件”、“编辑”、“窗口”、“帮助”四个菜单项,提供基本文件操作和基本的文本操作功能,例如“打开文件”、“复制”、“粘贴”功能。如图所示,左边是myApp,右边是windows自带的记事本应用。

步骤

**1.**创建Qt界面师类–主界面类notepad.cpp+notepad.h+notepad.ui。在ui中设计菜单界面和工具栏如下图所示,其中,使用到的图标素材可以去阿里巴巴图标素材网去找;图中红色框中“新建(&N)”括号中的内容“&N”是为该菜单添加快捷键Alt+N,更多添加快捷键的方式以及如何添加不同的快捷键自行查阅相关资料;绿色框中可以为action添加图标;另外拖动action可以将图标放入工具栏当作工具栏部件。

**2.**在ui中放入MDIArea容器,MdiArea 控件中文称作“MDI 窗口显示区”。先来解释一下什么是 MDI,MDI是 Multiple Document Interface 的简称,中文意思是多文档界面,多文档界面主要适用于当完成一项工作时需要用到多个文件,每个开启的文件占据一个视窗。此次设计用到MDI容器。然后使用栅格进行布局。上图中阴影部分为MDIArea。
**3.**创建c++类窗体子类subText.h+subText.cpp,虽然没有ui界面,但是让这个类继承自QTextEdit,那么在主界面类中实例化窗体子类,如:

   subText *sub =new subText();

然后将其放在MDI容器中,在主界面的MDA区域将会出现text界面

    ui->mdiArea->addSubWindow(sub);

**4.**界面搭建完毕,子类创建完毕,下面介绍如何实现具体的菜单项功能。首先在主界面类中,关联界面部件单击信号与处理槽函数,在处理槽函数中创建子类对象或者获取当前活跃对象,然后调用子类提供的方法,完成响应操作。
举例:“新建”功能
①在主界面中的初始化函数Init()中,(该函数被构造函数调用),关联界面部件信号与槽,如下:

void notePad::Init()
{    //文件->新建connect(ui->action_New,SIGNAL(triggered(bool)),this,SLOT(doProcessTriggeredByNew(bool)));
}

②在槽函数中,首先创建子类对象,然后将其放在MDI管理区域,之后调用子类提供的public方法,最后将子类对象显示。如下:

void notePad::doProcessTriggeredByNew(bool)
{subText *sub =new subText();//创建子类对象ui->mdiArea->addSubWindow((QWidget *)sub);//添加到MDI管理区域sub->setCodeName(codeName);//设置新建文本编码格式sub->newFile();//调用子类提供的public方法sub->show();//显示“新建”部件
}

③子类中对外提供方法
subtext.h中声明public方法

public:explicit subText(QWidget *parent = nullptr);void newFile();//新建窗体

subtext.cpp中实现

void subText::newFile()
{static int index =1;QString title = QString("未命名的文档[%1][*]").arg(index);this->setWindowTitle(title);index++;//处于编辑之后,启用“*”connect(this->document(),SIGNAL(contentsChanged()),this,SLOT(doProcessContentChanged()));
}

该方法中提供了在新建窗口对象时,设置窗口部件title的方法,并且在文本修改之后,将会出现“*”提示用户当前文本未保存。
**5.**当要改变某个参数时是怎么做的呢?以改变编码方式为例,介绍实现思路。
子类中设置类成员变量,codeName,那么在子类方法“保存文件”进行文本写入时,将根据此值进行编码;同样,子类方法“打开文件”时将依据此值进行文本读出。那么主界面如何修改这个编码值,使得保存、打开文件时都按照用户设定的编码值操作文本呢?
在主界面中维护类成员变量,codeName_M,在类初始化(构造函数被调用)时给这个变量默认值。用户单击编码方式“UTF-8”时,主界面通过响应该action的槽函数,槽函数更新codeName_M的值,并且调用子类提供的方法,“setcodec”,将主界面中codeName_M的值当作参数传递给setcodec,而setcodec将以codeName_M为参数更新子类中成员变量codeName的值,然后在进行“保存”“打开”操作时使用更新后的codeName进而改变编码方式。

C4—Qt实现记事本(一)2021-11-16相关推荐

  1. 2021.11.16【读书笔记】丨宏基因组分析流程

    本次笔记为美格基因宏基因组课程笔记 目录 1. quality control 2. Reads-based分析 2.1 物种分类鉴定 2.2 揭示物种多样性 2.3 功能分类鉴定 2.4 数据库和比 ...

  2. 函数(2)——4.兔子数列5.汉诺塔6.综合案例-RSA算法7.综合案例-体测成绩判定2021.11.16

    4.兔子数列(斐波那契数列) 一对兔子在出生两个月后,每个月能生出一对小兔子.现有一对刚出生的兔子,如果所有兔子都不死,那么一年后共有多少对兔子? 分析 n=1,兔子=1对: n=2,兔子=1对: n ...

  3. 2021/11/16 定时器Timer和cron表达式

    定时器java.util.Timer 这个Timer类里有一个很关键的方法,这里period单位是ms schedule(TimerTask task,Date firstTime,long peri ...

  4. 实战:批量重启物理机或批量从pxe启动-ipmi命令(测试成功-工作实战)-2021.11.16

    实验环境 win10 物理服务器 实验软件 链接:https://pan.baidu.com/s/1nGuT4rqXIxSCLoxA5dj_zg 提取码:hhcj –来自百度网盘超级会员V6的分享 1 ...

  5. 2021.11.16

    今天学了如何定义一个函数并且使用这个函数. 7-36 输出整数各位数字 (15 分) 本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字. 输入格式: 输入在一行中给出一个长整型 ...

  6. 学会自爱才是过好这一生的前提 2021.11.16日下午4点

    "只有你,才能决定你是谁,与其等别人来爱你,不如学着努力多爱自己一些." 像我这样的人,除了亲人,也从未被任何人爱过,从少年懵懵懂懂的时候,就期待能收获一份爱情,数十年过去了,仍旧 ...

  7. 2021.11.16 孤尽训练营D22——单元测试与系统安全规约

    认识单元测试 单元测试是对软件组成单元进行的测试.其目的时检验软件基本组成单位的正确性.测试对象时软件设计的最小单元:模块,又称为模块测试. 单元测试的AIR原则 A:自动化地关闭.开启单元测试 I: ...

  8. 首页推荐流支持快捷修改兴趣标签,问答支持展示gif【2021.11.8】

    hello,大家好,这里是「CSDN产品周报」第17期.本次更新主要涉及首页和问答两个产品模块,具体细节请往下看. 一.首页优化 1.「推荐」信息流新增「修改兴趣标签」按钮 从用户需求的角度考虑,对内 ...

  9. 2021.11.8-11.14 AI行业周刊(第71期):AI行业经验

    篇章一:行业经验 不同的AI公司,对于AI产品的场景定位不同. 有的公司是面向C端产品.有的公司专门做B端用户. 当然大白所在的公司,也有具体的定位,主要面向智慧金融.智慧机场.智慧城市. 之前,一直 ...

  10. 第13期微生物组-宏基因组分析(线上/线下同时开课,2021.11)

    福利公告:为了响应学员的学习需求,经过易生信培训团队的讨论筹备,现决定安排扩增子16S分析.宏基因组.Python课程和转录组的线上直播课.报名参加线上直播课的老师可在1年内选择参加同课程的一次线下课 ...

最新文章

  1. 《Pro ASP.NET MVC 3 Framework》学习笔记之二十七【视图1】
  2. 绍兴市一男子醉酒驾车还冲上公交车暴打司机
  3. SAP Hybris Commerce Cloud Accelerator Storefront 在 Eclipse 中的调试
  4. IT新潮关键词汇整理
  5. python教授_Python为何如此优秀?斯坦福教授告诉你!
  6. Gentoo - ssh-agent配置
  7. mysql递归自身连接_Mysql递归连接
  8. vs怎么写html5页面,怎么使用vscode写html5
  9. Ubuntu20.04安装eBPF BCC
  10. wpf 切换搜狗输入法英文_CPA《财管》考试,没时间按计算器,用搜狗V模式,真香!...
  11. 手把手!基于领域预训练和对比学习SimCSE的语义检索(附源码)
  12. Go (interface)接口二
  13. 归并排序验证性实验_性能优化技巧:有序归并
  14. 程序不能使用中文名_理线好帮手 骨伽 Bunker RGB 鼠标线夹使用心得
  15. 毕业论文查重以后如何降重?
  16. 线性时间选择——寻找第k小的数
  17. 如何将3DMAX参数重置为默认值?
  18. java基础考试_Java基础试题及其答案
  19. Jupyter notebook系列(6):更高级的配置Mark(显示行号,更改工作路径,使用sudo权限)
  20. Visual Studio Code中比较不同的分支(How to compare different branches in Visual Studio Code)

热门文章

  1. 编码器计数原理与电机测速原理——多图解析
  2. MacOS 按键精灵推荐
  3. 推荐15款免费的网页抓取软件
  4. 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第1章 Java开发入门
  5. 赤手空拳如何成就百万富翁? 赤手空拳如何成就百万富翁?——网络营销之七(第四招:百度文库+)...
  6. JSP电子病历管理系统
  7. 测试用例的定义,测试用例模板,测试用例的作用,测试用例编写注意事项
  8. 计算机组成原理中ID是什么,计算机组成原理
  9. 《智慧书》格言大全(1-300)
  10. 【问题解决】sql2012安装时卡在正在启动操作系统功能"NetFx3"上不动的解决办法