• 第四十八课、替换对话框的设计与实现------------------狄泰软件学院


    一、替换对话框

    1、替换对话框的需求分析

    (1)、可复用软件部件

    (2)、查找文本框中指定的字符

    (3)、替换单个指定的字符

    (4)、替换所有指定的字符

    附加需求:点击关闭按钮后隐藏

    2、替换对话框的设计与实现(继承自FindDialog

    3、替换对话框的界面布局

     4、替换单个目标算法流程

    5、MainWindow和ReplaceDialog之间的关系图

    #ifndef REPLACEDIALOG_H
    #define REPLACEDIALOG_H
    
    #include "FindDialog.h"
    
    class ReplaceDialog : public FindDialog
    {
        Q_OBJECT
    
        QPushButton m_replaceButton;
        QPushButton m_replaceAllButton;
        QLabel m_replaceAsLabel;
        QLineEdit m_replaceEdit;
    
        void initControl();
    
    protected slots:
        void onReplaceButtonClicked();
        void onReplaceAllButtonClicked();
    public:
        explicit ReplaceDialog(QWidget *parent = 0, QPlainTextEdit* pText = NULL);
    
    
            
    };
    
    #endif // REPLACEDIALOG_H
    可复用替换对话框头文件
    #include "ReplaceDialog.h"
    
    ReplaceDialog::ReplaceDialog(QWidget *parent, QPlainTextEdit* pText) :
        FindDialog(parent, pText)
    {
        initControl();
    
    
        connect(&m_replaceButton, SIGNAL(clicked()), this, SLOT(onReplaceButtonClicked()));
        connect(&m_replaceAllButton, SIGNAL(clicked()), this, SLOT(onReplaceAllButtonClicked()));
    
    
        setWindowTitle("替换");
        setLayout(&m_gLayout);
    }
    
    void ReplaceDialog::initControl()
    {
        m_replaceButton.setText("替换");
        m_replaceAllButton.setText("全部替换");
        m_replaceAsLabel.setText("替换为: ");
    
        m_gLayout.removeWidget(&m_checkBox);
        m_gLayout.removeWidget(&m_gBox);
        m_gLayout.removeWidget(&m_cancleButton);
    
        m_gLayout.addWidget(&m_replaceAsLabel, 1, 0);
        m_gLayout.addWidget(&m_replaceEdit, 1, 1);
        m_gLayout.addWidget(&m_replaceButton, 1, 2);
        m_gLayout.addWidget(&m_replaceAllButton, 2, 2);
        m_gLayout.addWidget(&m_checkBox, 3, 0);
        m_gLayout.addWidget(&m_gBox, 3, 1);
        m_gLayout.addWidget(&m_cancleButton, 3, 2);
    
    }
    
    void ReplaceDialog::onReplaceButtonClicked()
    {
        QString target = m_findLineEdit.text();
        QString to = m_replaceEdit.text();
    
        if(m_plainTextEdit != NULL && target !="" && to != "")
        {
            QString text = m_plainTextEdit->toPlainText();
    
            QString selText = m_plainTextEdit->textCursor().selectedText();
    
            if(selText == target)
            {
                m_plainTextEdit->insertPlainText(to);
            }
    
            onFindButtonClicked();
        }
    
    }
    void ReplaceDialog::onReplaceAllButtonClicked()
    {
        QString target = m_findLineEdit.text();
        QString to = m_replaceEdit.text();
    
        if(m_plainTextEdit != NULL && target !="" && to != "")
        {
            QString text = m_plainTextEdit->toPlainText();
    
            text.replace(target, to, m_checkBox.isChecked()? Qt::CaseSensitive : Qt::CaseInsensitive);
    
            m_plainTextEdit->clear();
    
            m_plainTextEdit->setPlainText(text);
        }
    }
    可复用替换对话框实现文件

    文本编辑器其它修改的地方:

    头文件:

    UI文件:

    Slots.cpp:

    二、小结

    (1)、替换对话框的功能涵盖了查找对话框的功能

    (2)、替换对话框可以继承自查找对话框

    (3)、替换功能的实现是基于查找算法完成的

    (4)、替换对话框是一个可复用的软件部件

  • 相关阅读:
    SpringMVC中请求路径参数使用正则表达式
    SpringBoot单元测试示例2
    数据结构与算法之——八大排序算法
    linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用
    linux学习之centos(一):在VMware虚拟机中安装centos6.5
    网易云课堂学习之VS相关
    emplace_back减少内存拷贝和移动
    Lepus经历收获杂谈(一)——confirm features的小工具
    MDM平台学习笔记
    四大开源协议:BSD、Apache、GPL、LGPL
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6422530.html
Copyright © 2020-2023  润新知