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

一、替换对话框

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)、替换对话框是一个可复用的软件部件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值