QT专业技能实训-富文本编辑器

  • Post author:
  • Post category:其他

目录

  • 1 概述
    • 1.1 专业技能实训目的与要求
    • 1.2 项目背景
      • 1.2.1 项目知识背景
      • 1.2.2 项目设计背景
    • 2 需求分析
      • 2.1软件需求
      • 2.1.1设计需求
      • 2.1.2功能需求
      • 2.2用户需求
      • 2.2.1需求分析报告
    • 3 概念结构设计
      • 3.1 功能结构
      • 3.1.1项目功能结构图
      • 3.1.2项目功能结构简介
    • 4 项目程序设计
      • 4.1总体设计
      • 4.1.1界面设计
      • 4.1.2关键性代码及简介
    • 5 调试
      • 5.1文件菜单
      • 5.2编辑菜单
      • 5.3格式菜单
      • 5.4其他功能
    • 6 总结

1 概述

1.1 专业技能实训目的与要求
专业技能实训的目的是:本次专业技能实训的主要任务是运用在大学期间专业课程中学到的理论知识来指导实践,了解毕业设计过程及其实现方法,学会用软件工程的方法解决实际问题。掌握软件工程、系统分析、系统设计、数据建模、数据库设计、软件开发等相关知识,掌握软件系统分析设计的具体步骤与基本方法,掌握系统开发工具的基本用法和基本内容,并能运用软件工程的方法与思路,针对初步选定的一个系统做调研分析,熟悉软件系统的开发流程。通过专业技能实训,提高实践动手技能,培养独立分析分析问题和解决问题的能力。
专业技能实训的要求:本次专业技能实训的选题比较灵活,可以是自主选题,也可以自己选择比较感兴趣的题目,重点是完成系统的调研分析与前期准备工作,题目要符合毕业设计的要求,并且具备一定的难度和深度。
1.2 项目背景
计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能、更专业的软件帮助我们完成工作,从而提高工作效率。
目前文本编辑器种类很多,所提供的功能也很多,但是本身都有一定细节上的缺陷,而且所占资源过大。本次设计在计算机操作系统下,以QT作为开发工具的面向对象,用C++编写一款可以实现基本的创建、保存等文本操作;剪切、复制、粘贴等编辑操作;字体颜色、大小设置的格式操作以及图片插入、表格创建等富文本操作。
1.2.1 项目知识背景
1.QT的简要介绍
Qt5主要聚焦于以下内容:
(1)出色的图形:Qt Quick2基于OpenGL(ES)来构建场景视图。重写的图形堆栈提供的图形效果与易用性在这一领域达到了从未有过的一个新高度。
(2)开发者生产力:QML和JavaScript是用于创建用户界面的主要手段。后端由C++驱动。JavaScript和C++之间的分割为前端开发人员集中精力创造漂亮的图形界面,后端的C++开发人员集中精力在稳定性、性能、延长运行时间提供了一个快速迭代。
(3)跨平台移植:随着综合的Qt平台抽象,它现在可以更容易、更快地移植到一个更广泛的平台。Qt5围绕着Qt必备模块和附加组件,它允许操作系统开发人员专注于要领模块,并引出一个较小的运行时概念。
(4)开放式开发:Qt目前在Qt-Project中真正开放。发展是开放的、社区性的。
2.QT的工作原理
与HTML类似,QML是一种标记性语言。元素被标记在QtQuick的花括号Item{}中。它为创建用户界面、开发人员高效性、易于阅读性而设计。用户界面可以使用JavaScript代码来增强。QtQuick能够很容易使用Qt C++来扩展自己的本地功能。简而言之UI被称为前端,本地部分称为后端。这可以让你从用户接口部分分割应用程序的密集计算和本地操作。
在一个典型的项目里,前端开发使用QML/JavaScript,后端代码、系统接口则使用QtC++开发。这让界面开发人员和功能开发人员之间的有一个自然的分割。通常情况下,后台使用Qt自己的单元测试框架进行测试,导出给前端开发人员使用。
3.主要知识介绍
一、项目建立
(1)建立C项目:非QT项目-》纯C语言项目。
(2)建立C++项目:非QT项目-》纯C++语言项目。
(3)建立GUI项目:应用程序-》Qt Widgets Application-》基类先选择QWidget,创建界面选项去掉,类名需要根据窗口功能来修改,首字母大写。
注意:1.固定自己的工作目录。2.注意项目路径选择不能包含中文。
二、界面编程
(1)建立第一个窗口程序
应用程序-》Qt Widgets Application-》基类先选择QWidget,创建界面选项去掉。类名需要根据窗口功能来修改,首字母大写。
(2)使用类方法改变对象属性
尝试改变窗口大小属性方法:1.搜索相应的方法。2.搜帮助文档,首先定位到文档中相应的属性:Properties,再去查找相应的方法。
(3)窗口增加按钮,设置按钮显示文字为”点击”,并改变按钮字体颜色。
QPushButton::QPushButton(QWidget * parent = 0)
//凡是在构造方法中看到parent,代表是把自己放到parent上。
void setText(const QString & text)
//设置按钮显示文本。
void setStyleSheet(const QString & styleSheet)
//这个属于QWidget类,是通用方法,用于所有部件设置样式。颜色查找:Qt::GlobalColor
三、使用UI设计器
UI编辑器会在项目构建目录中自动生成一个ui_xxx.h,来表示ui编辑器界面的代码,属于自动生成的,不要修改。修改只能通过ui编辑器来做。
四、QT打印调试方法
(1)类C语言使用方法
int val = 5;
qDebug(“val = %d”, a); //方法1,类似于C的printf函数。
(2)类C++使用方法
int val = 5;
qDebug()<<“val = “<<val; //方法2,类似于C++的cout函数。
五、信号与槽
(1)简介
信号与槽是QT在C++基础上新增特性,类似与windows编程中的事件回调机制。
(2)使用条件
1.通信的对象必须是从 QObject 派生出来的。
2.类定义开始要加入 Q_OBJECT 宏。
要点:
1.函数是静态的,可以不用实例化即可调用。
2.信号和槽可以从帮助文档查找,也可以自己定义。
3.槽方法本身就是一个普通的方法,是可以被直接调用。
4.信号也是一个方法,但是信号不能被直接调用,只能被发送。
5.如果槽函数带形参,是不可以直接传入,只能通过信号传递。
(3)使用步骤

  1. 帮助文档输入”connect”,进入函数帮助文档。
    2.复制文档中demo代码。
    3.粘贴后根据需求做修改。
    4.实例:点击按钮,关闭窗口。
    (4)自定义槽函数
    关键字:public(private/protected) slots:
    (5)自定义信号
    关键字:signals:定义信号。 emit:发送信号。信号只需要定义,不需要实现。
    (6)信号与槽关联关系
    QObject::connect( sender, SIGNAL(signal),receiver, SLOT(method) );
    //信号与信号相连
    QObject::connect( sender, SIGNAL(signal), receiver, SIGNAL(signal) );
    //同一个信号连接到多个槽
    QObject::connect( sender, SIGNAL(signal),receiver, SLOT(method1) );
    QObject::connect( sender, SIGNAL(signal),receiver, SLOT(method2) );

    //多个信号连接到同一个槽
    QObject::connect( sender, SIGNAL(signal1),receiver, SLOT(method) );
    QObject::connect( sender, SIGNAL(signal2),receiver, SLOT(method) );

    (7)信号与槽的对应关系
    1.可以传递任意个数的参数。
    2.信号的参数个数必须大于等于槽的参数个数。
    3.参数类型必须一一匹配。
    (8)取消信号与槽的关联
    bool QObject::disconnect(const QObject * sender, const char * signal,
    const QObject * receiver, const char * method)
    1.2.2 项目设计背景
    针对嵌入式产品的高度个性化,其外观、与用户交互的界面千差万别的特点,故而设计目标是打造一个能在嵌入式终端运行、通用的、可以方便的支持各种空间、各种图片格式,具有体积小、可裁剪、可移植的这样一个面向嵌入式的应用程序系统,使各种嵌入式设备也能具有美观的用户界面,相对丰富的功能,操作起来简单又直观。
    本次设计在计算机操作系统下,以QT作为开发工具的面向对象,用C++编写一款可以实现基本的创建、保存等文本操作;剪切、复制、粘贴等编辑操作;字体颜色、大小设置的格式操作以及图片插入、表格创建等富文本操作。
    本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构。以菜单栏和工具栏为主体函数,下面包括诸多小的功能模块实现函数,同时还涉及大量的函数调用。在功能模块实现函数中,包含大量的信号和槽之间的关联和触发,以及实现按钮和工具操作与实际操作之间的响应。
    1.2.3 项目适合人群及意义
    本项目主要为嵌入式系统是打造一个能在嵌入式终端运行、通用的、可以方便的支持各种空间、各种图片格式,具有体积小、可裁剪、可移植的这样一个面向嵌入式的应用程序。主要面向群体是使用嵌入式进行文本操作的人群。
    计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能、更专业的软件帮助我们完成工作,从而提高工作效率。所以本项目所设计的应用程序完美的诠释了效率的问题,而且具有使用方便,易于修改,界面简单等特点。

2 需求分析

2.1软件需求
2.1.1设计需求
本项目主要为嵌入式系统是打造一个能在嵌入式终端运行、通用的、可以方便的支持各种空间、各种图片格式,具有体积小、可裁剪、可移植的这样一个面向嵌入式的应用程序。
本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构。以菜单栏和工具栏为主体函数,下面包括诸多小的功能模块实现函数,同时还涉及大量的函数调用。在功能模块实现函数中,包含大量的信号和槽之间的关联和触发,以及实现按钮和工具操作与实际操作之间的响应。
2.1.2功能需求
本次设计在计算机操作系统下,以QT作为开发工具的面向对象,用C++编写一款可以实现基本的创建、保存等文本操作;剪切、复制、粘贴等编辑操作;字体颜色、大小设置的格式操作以及图片插入、表格创建等富文本操作。
2.2用户需求
2.2.1需求分析报告
针对嵌入式产品的高度个性化,其外观、与用户交互的界面千差万别的特点,故而设计目标是打造一个能在嵌入式终端运行、通用的、可以方便的支持各种空间、各种图片格式,具有体积小、可裁剪、可移植的这样一个面向嵌入式的应用程序系统,使各种嵌入式设备也能具有美观的用户界面,相对丰富的功能,操作起来简单又直观。
计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能、更专业的软件帮助我们完成工作,从而提高工作效率。所以本项目所设计的应用程序完美的诠释了效率的问题,而且具有使用方便,易于修改,界面简单等特点。

3概念结构设计

3.1功能结构
3.1.1项目功能结构图
本编辑器由一个主窗口QMainWindow和一个中心窗口Text Edit外加菜单栏和工具栏构成。其中主窗口用于总体布局,中心窗口用于对文字进行编辑,菜单栏则包含四个主要按钮控件—文件、编辑、格式、插入,用于处理常见事物,工具栏则包含大量的快捷按钮,以便提高软件的使用效率。(如图3.1)
在这里插入图片描述
图3.1 项目功能结构图
3.1.2项目功能结构简介
(1)编辑窗口设计
先在主窗口的中心加入一个文本编辑器Text Edit,以它作为文本编辑器的中心窗口,并对其进行初始化。Text Edit是一个文本编辑框,用以对文字进行编辑,支持大多数的编辑功能。
中心窗口部件处在主窗口的中心,且一个主窗口只有一个中心窗口部件。主窗口QMainWindow具有自己的布局管理器,因此在QMainWindow窗口上设置布局管理器或创建一个父窗口部件为QMainWindow的布局管理器都是不允许的,但可以在主窗口的中心窗口部件上设置布局管理器。(如图3.2)

在这里插入图片描述

图3.2 编辑窗口示意图
(2)菜单栏设计
菜单栏是一系列命令的列表。菜单可以让用户浏览应用程序并且处理一些事物,快捷菜单和工具栏则提供了对那些经常使用的功能进行快速访问的方法,可以提高软件的使用效率。
为了实现菜单栏、工具栏按钮、键盘快捷方式等命令的一致性,Qt使用动作(Action)来表示这些命令。Qt的菜单栏是由一系列的QAction动作对象构成的列表。而菜单栏则是包容菜单的容器,它通常位于主窗口的顶部,标题栏的下部。一个主窗口通常只有一个菜单栏。(如图3.3)
在这里插入图片描述
图3.3 菜单栏设计示意图
1.文件菜单
文件菜单下包含所有文件操作,如创建、打开、保存等。通过new QAction实例化,通过addAction添加。
2.编辑菜单
编辑菜单包含所有的编辑操作,如复制、粘贴、撤销、恢复等,通过addAction函数添加。
3.格式菜单
格式菜单包含所有的格式操作,如加粗、斜体、颜色、对齐方式等。
4.插入菜单
插入菜单包含插入表格和插入图片操作,插入的表格为事先设置好的表格,插入的图片可以进行随机选择。
(3)工具栏设计
工具栏是一系列类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成。工具栏的位置处在菜单栏的下面、状态栏的上面,工具栏可以停靠在主窗口的上、下、左、右这四个不同的位置,一个主窗口可以有多个工具栏。(如图3.4)
在这里插入图片描述
图3.4 工具栏设计示意图
(4)其他设计
主要包括时间显示、重置文本和添加文字操作。显示的时间为本计算机当前时间,重置文本操作用于对中心窗口的内容进行初始化,添加文字操作用于在中心窗口尾端进行文字添加。(如图3.5)
在这里插入图片描述
图3.5其他设计示意图

4项目程序设计

4.1总体设计
4.1.1界面设计
本编辑器界面主要由标题栏、菜单栏、工具栏、编辑窗口和其他功能模块组成,本次设计在计算机操作系统下,以QT作为开发工具的面向对象,用C++编写一款可以实现基本的创建、保存等文本操作;剪切、复制、粘贴等编辑操作;字体颜色、大小设置的格式操作以及图片插入、表格创建等富文本操作。具体界面设计如下图4.1所示:
在这里插入图片描述
图4.1 编辑器界面设计示意图
主要设计步骤:
(1)在Qt Creator中新建Qt Widgets应用,类名默认为MainWindow,基类默认为QMainWindow不做改动。建立好项目后,在文件列表中双击.ui文件进入设计模式。
添加菜单,双击左上角的“在这里输入”,修改为“文件(&F)”,这里要使用英文半角的括号,“&F”被称为加速键,表明程序运行时,可以按下Alt+F键来激活该菜单。修改完成后,按下回车键,并在弹出的下拉菜单中,将第一项改为“新建(&N)”并按下回车键。

这时可以看到在下面的Action编辑器中已经有了“新建”动作。在这里用鼠标点击该动作,将其拖入菜单栏下面的工具栏中。

(2)添加资源文件
第一步,添加Qt资源文件。往项目中添加新文件,选择Qt分类中的Qt Resource File,文件名称改为“myImage”,其他选项默认即可。
第二步,添加资源。建立好资源文件后会默认进入资源管理界面,就是新建的myImage.qrc文件中。可以先到项目文件夹myMainWindow中新建一个名为“images”的文件夹,并在其中放入图标图片。(注意:Qt的资源系统要求资源文件必须放在与qrc文件同级或子级目录下,如果放在其他地方,当添加资源时会提示将文件复制到有效的位置。)
第三步,回到Qt Creator中,在资源管理界面,按下“添加”按钮,选择“添加前缀”,然后将属性栏中的前缀改为“/myImage”,再点击“添加”按钮,选择“添加文件”,在弹出的对话框中进入到前面新建的images文件夹中,选中需要的图片,点击打开即可。这时myImage.qrc文件中就出现了添加的图片的列表。最后按下Ctrl+S快捷键,保存对文件的修改(注意:这一点很重要,如果没有保存,在下面使用图片时将看不到图片)。
第四步,使用图片。在设计模式Action编辑器中双击“新建”动作,这时会弹出编辑动作对话框。在其中将对象名称改为“Newfileaction”,工具提示改为“新建”,然后按下图标后面的按钮,进入选择资源界面。第一次进入该界面需要按下左上角的重新加载绿色箭头图标,这时图片资源就显示出来了。
4.1.2关键性代码及简介
(1)文件菜单
文本编辑器应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。需要用标准文件对话框(QFileDialog控件)。该控件包含多种文件操作,如fileNew()、fileOpen()、fileSave()、fileSaveAs()等。
1.新建功能函数

void MainWindow::on_Newfileaction_triggered()
{
    if(ui->textEdit->document()->isModified())
    {
        if( "" !=ui->textEdit->toPlainText() )
        {
            QMessageBox::StandardButton select = QMessageBox::question(this, "",tr("是否要保存文件内容?"),                                                                 QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Yes);
            if(select == QMessageBox::Yes)
            {
                on_Saveaction_triggered();
               ui->textEdit->clear();
            }
            if(select == QMessageBox::No)
            {
                ui->textEdit->clear();
            }
            if(select == QMessageBox::Cancel)
            {
            } }}
    curFile = tr("新建.rtf");
    setWindowTitle(curFile);
    ui->textEdit->clear();
    ui->textEdit->setVisible(true);
}
2.打开功能函数
void MainWindow::on_OpenFileaction_triggered()
{
    QString filename = QFileDialog::getOpenFileName(this, tr("打开文件"), QDir::currentPath(),tr("富文本(*.rtf);;纯文本(*.txt)"));
      QString Path(filename);
      char *Tmppath = (char *)filename.toStdString().data();
      for(int i = filename.length(); i > 0; --i)
      {
          if(Tmppath[i-1] == '/')
          {
              Tmppath += i;
              break;
          }
      }
      Path.sprintf("%s - %s",Tmppath, "富文本编辑器" );
      setWindowTitle(Path);
      QFile file(filename);
      if(file.open(QFile::ReadWrite))
      {
          ui->textEdit->clear();
          QTextStream stream(&file);
          if(!stream.atEnd())
          {
              ui->textEdit->setText(stream.readAll());
          }
      }
}
3.保存功能函数
void MainWindow::on_Saveaction_triggered()
{   QFileDialog dialog(this,"保存文件",".",tr("富文本(*.rtf);;纯文本(*.txt)"));
            dialog.setAcceptMode(QFileDialog::AcceptSave);
            QString filterMod;
            QString fileName;
            if(dialog.exec())
            {fileName  = dialog.selectedFiles()[0];
                filterMod = dialog.selectedNameFilter();}
            QFile file(fileName);
            if(file.open(QFile::WriteOnly |QFile::Truncate))
            {
                QTextStream stream(&file);
                if("富文本(*.rtf)" == filterMod)
                    stream<<ui->textEdit->toHtml().toUtf8();
                if("纯文本(*.txt)" == filterMod)
                    {   QMessageBox::StandardButton button =
                             QMessageBox::warning(this, tr("提示"),
                                 QString(tr("保存为纯文本格式,颜色、字体等属性会丢失。\n确定要这样做么?")),                                     QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
                         if(button == QMessageBox::Yes)
{stream<<ui->textEdit->toPlainText().toUtf8();}
                        else
               {    ;
                         }
                         } }file.close();}
4.另存为功能函数
void MainWindow::on_SaveAsaction_triggered()
{     QFileDialog dialog(this,tr("另存为"),".",tr("富文本(*.rtf);;纯文本(*.txt)"));
          dialog.setAcceptMode(QFileDialog::AcceptSave);
          QString filterMod;
          QString fileName;
          if(dialog.exec())
          {fileName  = dialog.selectedFiles()[0];
              filterMod = dialog.selectedNameFilter();}
          QFile file(fileName);
          if(file.open(QFile::WriteOnly |QFile::Truncate))
          {   QTextStream stream(&file);
              if("富文本(*.rtf)" == filterMod)
                  stream<<ui->textEdit->toHtml().toUtf8();
              if("纯文本(*.txt)" == filterMod)
                  {  QMessageBox::StandardButton button =
                           QMessageBox::warning(this, tr("提示"),
                               QString(tr("保存为纯文本格式,颜色、字体等属性会丢失。\n确定要这样做么?")),                              QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
                       if(button == QMessageBox::Yes)
              {stream<<ui->textEdit->toPlainText().toUtf8();}
                       else
                       {  ;
                       }
                  } }
file.close();}
5.关闭功能函数
void MainWindow::on_Closeaction_triggered()
{
    close();
}
6.退出功能函数
void MainWindow::on_Exitaction_triggered()
{
    QMessageBox::StandardButton button =
                QMessageBox::question(this, tr("退出程序"),QString(tr("是否退出")),                             QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
        if(button == QMessageBox::Yes)
        {
            close();
        }
}
(2)编辑菜单
编辑菜单包含剪切、复制、撤销、恢复等功能,这些是文本编辑器所必须包含的基本功能,由于这些功能是TextEdit默认就有的,所以我们只需调用相应函数,各操作的具体实现如下:
1.剪切
void MainWindow::on_Cutaction_triggered()
{
    ui->textEdit->cut();
}


2.复制
void MainWindow::on_Copyaction_triggered()
{
    ui->textEdit->copy();
}
3.粘贴
void MainWindow::on_Pasteaction_triggered()
{
    ui->textEdit->paste();
}
4.撤销
void MainWindow::on_Undoaction_triggered()
{
    ui->textEdit->undo();
}
5.回撤
void MainWindow::on_Redoaction_triggered()
{
    ui->textEdit->redo();
}
(3)格式菜单
格式操作包括加粗、斜体、下划线、以及对齐方式和字体颜色、大小、类型的设置等操作。各种操作的具体实现如下:
1.加粗
void MainWindow::on_Boldaction_triggered()
{   QTextCharFormat fmt;
    fmt.setFontWeight(boldcheck ? QFont::Bold : QFont::Normal);
    mergeFormat(fmt);
    boldcheck = !boldcheck;}
2.倾斜
void MainWindow::on_Inclineaction_triggered()
{
    QTextCharFormat fmt;
    fmt.setFontItalic(inclinecheck ? true : false);
    mergeFormat(fmt);
    inclinecheck = !inclinecheck;
}
3.下划线
void MainWindow::on_Underlineaction_triggered()
{
    QTextCharFormat fmt;
    fmt.setFontUnderline(Underlinecheck ? true : false);
    mergeFormat(fmt);
    Underlinecheck = !Underlinecheck;
}
4.左对齐
void MainWindow::on_Leftaction_triggered()
{
    if (Qt::AlignLeft == ui->textEdit->alignment())
        return;
    ui->textEdit->setAlignment(Qt::AlignLeft);
}
5.右对齐
void MainWindow::on_Centeraction_triggered()
{
    if (Qt::AlignCenter == ui->textEdit->alignment())
        return;
    ui->textEdit->setAlignment(Qt::AlignCenter);}
6.居中
void MainWindow::on_Rightaction_triggered()
{
    if (Qt::AlignRight == ui->textEdit->alignment())
        return;
    ui->textEdit->setAlignment(Qt::AlignRight);
}
7.字体
void MainWindow::on_Fontaction_triggered()
{
    bool ok;
    QFont font = QFontDialog::getFont(
                &ok, QFont(tr("微软雅黑"), 15), this);
    if (ok)
    {
        QTextCharFormat fmt;
        fmt.setFont(font);
        mergeFormat(fmt);
    }
}
8.颜色
void MainWindow::on_Coloraction_triggered()
{
    {
        const QColorDialog::ColorDialogOptions options = QFlag(QColorDialog::ShowAlphaChannel);
        const QColor color = QColorDialog::getColor(Qt::green, this, tr("选择颜色"), options);
        if (color.isValid())
        {
            ui->textEdit->setTextColor(color);
        }
    }
}
(4)其他功能
其他功能主要包括插入图片,插入表格、重置文本、添加文本、显示时间、查找、设置光标。具体操作实现如下:
1.设置光标
void MainWindow::mergeFormat(QTextCharFormat fmt)
{
    QTextCursor cursor = ui->textEdit->textCursor();
    if (!cursor.hasSelection()) {
       cursor.select(QTextCursor::WordUnderCursor);
    }
    cursor.mergeCharFormat(fmt);
}
2.查找
void MainWindow::showFindText()
{
    QString str = findLineEdit->text();
    if (!ui->textEdit->find(str, QTextDocument::FindBackward))
    {
        QMessageBox::warning(this, tr("查找"),
                             tr("找不到%1").arg(str));
    }
}
void MainWindow::on_Findaction_triggered()
{findDlg->show();}
3.显示时间
void MainWindow::on_datapushButton_clicked()
{
    QDateTime current = QDateTime::currentDateTime();
    QString time =current.toString("yyyy-M-dd hh:mm:ss");
    ui->textEdit->append(time);
}
4.重置文本
void MainWindow::on_ClearpushButton_clicked()
{
    ui->textEdit->clear();
}
5.添加文本
void MainWindow::on_pushButton_2_clicked()
{   QString str=ui->lineEdit->text();
    ui->textEdit->append(str);
}
6.插入表格
void MainWindow::on_Tableaction_triggered()
{   QTextCursor cursor = ui->textEdit->textCursor();
    QTextTableFormat format;          // 表格格式
    format.setCellSpacing(2);         // 表格外边白
    format.setCellPadding(10);        // 表格内边白
    cursor.insertTable(3, 3, format); // 插入3行3列表格
}
7.插入图片
void MainWindow::on_Imageaction_triggered()
{
    QTextImageFormat format;          // 图片格式
    QString file = QFileDialog::getOpenFileName(this, tr("选择一张图片"), ".", tr("Images(*.bmp *.jpg *.jpeg *.png)"));
     ui->textEdit->textCursor().insertImage(file);
}
void MainWindow::on_Aboutaction_triggered()
{
    QDialog* w = new QDialog(this);
        w->setWindowTitle("版本说明");
        w->resize(200,100);
        QLabel* text = new QLabel(w);
        text->move(80,50);
        text->setText("版本1.0");
        w->show();
}

5调试

5.1文件菜单
文本编辑器应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。具体调试结果如下:

在这里插入图片描述
图 5.1 新建功能调试示意图图 5.2 打开功能调试示意图
在这里插入图片描述
图 5.2 打开功能调试示意图
在这里插入图片描述
图5.3 保存功能调试示意图
在这里插入图片描述
图5.4 另存为功能调试示意图
在这里插入图片描述
图5.5 退出功能调试示意图
5.2编辑菜单
编辑菜单包含剪切、复制、撤销、恢复等功能,具体调试结果如下:

图5.6 编辑菜单调试示意图
5.3格式菜单
格式操作包括加粗、斜体、下划线、以及对齐方式和字体颜色、大小、类型的设置等操作。具体调试结果如下:
在这里插入图片描述
图5.7 字体功能调试示意图
在这里插入图片描述
图5.8 颜色功能调试示意图

在这里插入图片描述
图5.9 加粗、倾斜、下划线调试示意图
5.4其他功能
其他功能主要包括插入图片,插入表格、重置文本、添加文本、显示时间、查找、设置光标。具体调试结果如下:
在这里插入图片描述
图5.10 插入表格功能示意图
在这里插入图片描述
图5.11 插入图片功能调试示意图
在这里插入图片描述图5.12 时间和重置功能调试示意图
在这里插入图片描述
图5.13 添加文本功能调试示意图

6 总结
通过这段时间的实训设计,我们学到了很多知识,也有很多的机会:首先,我明白了其实认真学习一门语言并不困难,关键是所追求的学习方法和途径。一条好的途径便于快速掌握、熟悉和运用语言。其次,真正可以称得上“好程序”是要满足一大堆的条件,需要满足可读性、健壮性、可维护性、高效性等条件。其实大部分功能是比较容易实现的,但其后的测试、修改、完善用了不少时间。再次,这次程序编写培养了我分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我的实践编程能力。最后,我明白了编程是需要细心和耐心的,特别是在调试的时候,查找错误是很麻烦的,所以我们要养成一个良好的编程习惯。
在本次编辑器设计的实现过程中遇到了很多问题,由于C++基础比较差,对面向对象的编程思想理解不到位,刚开始对程序的整体框架设计不合理,导致在实现和调试的时候遇到了一些问题。后来不得不重新设计整个程序的框架,正是不断地修改与完善自己的程序,促进了我对C++及QT知识点的掌握。同时也了解到了自己的不足,在以后的学习和工作过程中,需要花更多的时间来你不这些不足。


版权声明:本文为qq_36444039原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。